Codeigniter に Datamapper ORM を使用して、特定のクエリに問題があります。私のデータ モデルは、それぞれが多くのカテゴリ、ユーザー、およびタグを持つブログ投稿を持つように設定されています。特定のカテゴリ、ユーザー、またはタグに関連しているが 、ステータスが「公開済み」または「スケジュール済み」のブログ投稿を取得したい。
つまり、私が達成したいことは次のとおりです。
category = General AND (status = published OR status = scheduled)
Datamapper ORM で、次の構文を試しました (「一般」という名前のカテゴリにある投稿が必要であると仮定します)。
$posts->where_related('category', 'name', 'General')
->where('status', 'published')
->or_where('status', 'scheduled')
->get();
ただし、これにより次の投稿が取得されます(status = published AND category = General) OR status = scheduled
。ステートメントの順序を変更しても役に立ちません。OR条件を括弧でネストするためのDatamapper構文があるかどうかわからないようです。
次のような生の SQL でクエリを記述できることに気付きました。
SELECT * FROM posts WHERE (status = "published" OR status = "scheduled) AND ...
...さらに複雑な JOIN ステートメントが続きますが、私が Datamapper を使用しているすべての理由は、リレーションシップの操作を容易にするためです。または条件付き!また、サブクエリを使用できることも認識していますが、繰り返しますが、それほど複雑であるべきではないと思います。
足りないものはありますか?Datamapper の構文を使用してこのクエリを実行できるように、このクエリを整理する方法はありますか? AND/OR文の演算順序を指定できるようにするには、どうにか組み込みたい...