Doctrine findBy with OR condition

后端 未结 4 1645
夕颜
夕颜 2021-02-04 23:54

Is it possible to use OR statement in Doctrine findBy() method? I know that given array is interpreted as case1 AND case2... Like this

相关标签:
4条回答
  • 2021-02-05 00:12

    I know that this is old question. Anyways, it's possible to use Criteria for the complex queries (in Doctrine 2 at least):

    $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);
    
    0 讨论(0)
  • 2021-02-05 00:21

    As far as I know this is not a supported feature by Doctrine to use IN() queries with findby. You could do two things:

    1. Implement a findByStatus(array $statusTypes) method in your (custom) 'notif' repository class. If you like this approach I can give you a example.

    2. Convert your findBy to the following:

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

    That should work either :)

    0 讨论(0)
  • 2021-02-05 00:28

    If you are using MongoDB and need more complex queries, like "less than" linked together with OR, but cannot use a query builder, this also works with this syntax:

       ->findBy(array(
                    '$or' => array(
                        array('foo' => array('$lt' => 1234)),
                        array('$and' => array(
                            array('bar' => 45678),
                            array('baz' => array('$lt' => 89013))
                        ))
                    )
        ));
    

    Or as a solution for your question:

       ->findBy(array(
                    '$or' => array(
                        array('status' => 1),
                        array('status' => 2),
                        array('status' => 3),
                    )
        ));
    
    0 讨论(0)
  • 2021-02-05 00:30

    You can write:

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

    and that should work too.

    0 讨论(0)
提交回复
热议问题