PHP Doctrine ORM を使用してクエリを作成しています。しかし、DQL (Doctrine Query Language) を使用して次の WHERE 句を記述する方法がよくわかりません。
WHERE name='ABC' AND (category1 = 'X' OR category2 = 'X' OR category3 = 'X')
AND price > 10
括弧の位置を指定するにはどうすればよいですか?
私が現在PHPコードに持っているのはこれです:
->where('name = ?', 'ABC')
->andWhere('category1 = ?', 'X')
->orWhere('category2 = ?', 'X')
->orWhere('category3 = ?', 'X')
->andWhere('price > ?', 10)
しかし、これは次のようなものを生成します
WHERE name='ABC' AND category1 = 'X' OR category2 = 'X' OR category3 = 'X'
AND price > 10
操作の順序が原因で、意図した結果が返されません。
また、「where」、「andWhere」、および「addWhere」メソッドに違いはありますか?
UPDATE わかりました、DQL を使用して複雑なクエリを実行することはできないようです。そのため、手動で SQL を記述し、andWhere() メソッドを使用して追加しようとしています。ただし、私は WHERE..IN を使用しており、Doctrine は囲み括弧を削除しているようです:
$q->andWhere("(category1 IN $subcategory_in_clause
OR category2 IN $subcategory_in_clause
OR category3 IN $subcategory_in_clause)");