このようなQueryBuilder
を使用してDQLを構築する必要があります
[QUERY]... AND WHERE e.type = x OR e.type = Y OR e.type = N [...]
配列に型があります。この配列をクエリビルダーに渡すにはどうすればよいですか?
$qb->andWhere($qb->expr()->orx(CONDITIONS));
タイプのリストは動的になり、各foreachタイプのループで$qb->andWhere
を呼び出すと、ANDが増えるだけで、WHEREはORになります。
乗算orx
式を保存してからandWhere
に追加できますか?これを解決する方法、おそらく一般的な問題はありますか?
明日はもっといい日になると思っていた。解決策は簡単です。あなたはOR式の配列をそのように作ることができます
$ors[] = $qb->expr()->orx('e.type = '.$qb->expr()->literal($value));
そして、それを次のように結合メソッドを介してクエリビルダーのandWhere()/ Where()メソッドに追加します:
$qb->andWhere(join(' OR ', $ors));
私はそう願っています、そして私はこれを見つけました:
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$orX = $qb->expr()->orX();
foreach ($conditions as $condition) {
$orX->add($condition);
}
$qb->add('where', $orX);
@meze提案を使用すると、コードを簡略化してforeachステートメントを次のように置き換えることができます。
$orX->addMultiple($conditions);
@DEY彼の答えは簡略化できます。 foreachは必要ありません。これも機能します。
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$orX = $qb->expr()->orX();
$orX->addMultiple($conditions);
$qb->where($orX);
次のように...
をphpで使用することもできます。
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$criteria = Criteria::create();
$criteria->andWhere(Criteria::expr()->orX(...$conditions));
call_user_func_array 関数 このように を使用することもできます。
配列の項目をパラメーターとして渡すメソッドを呼び出すことができます。