53

DoctrineメソッドORでステートメントを使用することは可能ですか? findBy()指定された配列が次のように解釈されることを知ってい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;

すべてのケースを取得する方法はありますか?

4

4 に答える 4

176

あなたは書ける:

$this->repos['notif']->findBy(array('status' => array(1, 2, 3)));

それもうまくいくはずです。

于 2013-11-20T12:15:15.757 に答える
15

私が知る限り、これは、findby で IN() クエリを使用する Doctrine によってサポートされている機能ではありません。次の 2 つのことを行うことができます。

  1. findByStatus(array $statusTypes)(カスタム) 'notif' リポジトリ クラスにメソッドを実装します。このアプローチが気に入ったら、例を挙げましょう。

  2. findBy を次のように変換します。

    $qb = $this->repos['notif']->createQueryBuilder('n');
    $data = $qb->where($qb->expr()->in('status', array(1,2,3)))->getQuery()->getResult();
    

それはどちらかで動作するはずです:)

于 2012-02-13T10:54:30.453 に答える
9

MongoDB を使用していて、"less than" を 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),
                )
    ));
于 2015-02-09T14:41:41.663 に答える