学说发现与OR条件

在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; 

有办法得到所有案件吗?

据我所知,这不是由教条支持使用IN()与findby查询function。 你可以做两件事情:

  1. 在你的(自定义的)'notif'仓库类中实现一个findByStatus(array $statusTypes)方法。 如果你喜欢这种方法,我可以给你一个例子。

  2. 将您的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来进行复杂的查询(至less在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)) )) ) )); 

或者作为你的问题的解决scheme:

  ->findBy(array( '$or' => array( array('status' => 1), array('status' => 2), array('status' => 3), ) ));