2

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文の演算順序を指定できるようにするには、どうにか組み込みたい...

4

1 に答える 1

1

where句に括弧が必要な場合は、括弧を追加する必要があります。

いくつかの例については、 http://datamapper.wanwizard.eu/pages/get.html#Query.Groupingを参照してください。

于 2012-01-28T15:40:15.963 に答える