Doctrine findBy()
メソッドでOR
ステートメントを使用することは可能ですか?与えられた配列はcase1 AND case2...
このような
$this->repos['notif']->findBy(array('status' => 1, 'status' => 2, 'status' => 3);
を意味する
SELECT * FROM `notif` WHERE status=1 AND status=2 AND status=3;
今、私は立つために何かが必要です:
SELECT * FROM `notif` WHERE status=1 OR status=2 OR status=3;
すべてのケースを取得する方法はありますか?
私の知る限り、これはDoctrineがfindbyでIN()クエリを使用するためにサポートされている機能ではありません。次の2つのことができます。
(カスタム) 'notif'リポジトリクラスにfindByStatus(array $statusTypes)
メソッドを実装します。このアプローチが気に入ったら、例を挙げましょう。
FindByを次のように変換します。
$qb = $this->repos['notif']->createQueryBuilder('n');
$data = $qb->where($qb->expr()->in('status', array(1,2,3)))->getQuery()->getResult();
それはどちらでも動作するはずです:)
あなたは書ける:
$this->repos['notif']->findBy(array('status' => array(1, 2, 3)));
それもうまくいくはずです。
これは古い質問です。とにかく、複雑なクエリにCriteria
を使用することが可能です(少なくともDoctrine 2で):
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria
->orWhere($criteria->expr()->contains('domains', 'a'))
->orWhere($criteria->expr()->contains('domains', 'b'));
$groups = $em
->getRepository('Group')
->matching($criteria);
MongoDBを使用しているで、ORでリンクされた「より小さい」などのより複雑なクエリが必要であるが、クエリビルダを使用できない場合、これは次の構文でも機能します。
->findBy(array(
'$or' => array(
array('foo' => array('$lt' => 1234)),
array('$and' => array(
array('bar' => 45678),
array('baz' => array('$lt' => 89013))
))
)
));
またはあなたの質問の解決策として:
->findBy(array(
'$or' => array(
array('status' => 1),
array('status' => 2),
array('status' => 3),
)
));