学说发现与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。 你可以做两件事情:
-
在你的(自定义的)'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
来进行复杂的查询(至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), ) ));
- 将SecurityContext注入到Symfony2中的侦听器prePersist或preUpdate中以获取createdBy或updatedBy中的用户导致循环引用错误
- 当插入一个实体的关联,有没有办法只是使用FK而不是检索实体?
- 原则中fetch =“EAGER”和fetch =“LAZY”有什么区别?
- 设置LIMIT与教义2?
- Nelmio Api Doc中的组排除不起作用更新composer php之后
- Doctrine2版本库是保存实体的好地方吗?
- 在Doctrine 2中指定小数字段types时,规模和精度是什么意思?
- 如何使用比较准则的findBy方法
- Symfony 2:从存储库创build一个服务