ArV*_*Van 44 findby doctrine-orm
是否可以OR在Doctrine findBy()方法中使用语句?我知道给定的数组被解释为case1 AND case2...
像这样
$this->repos['notif']->findBy(array('status' => 1, 'status' => 2, 'status' => 3);
Run Code Online (Sandbox Code Playgroud)
代表
SELECT * FROM `notif` WHERE status=1 AND status=2 AND status=3;
Run Code Online (Sandbox Code Playgroud)
现在我需要一些东西代表:
SELECT * FROM `notif` WHERE status=1 OR status=2 OR status=3;
Run Code Online (Sandbox Code Playgroud)
有办法获得所有案件吗?
小智 147
你可以写:
$this->repos['notif']->findBy(array('status' => array(1, 2, 3)));
Run Code Online (Sandbox Code Playgroud)
这应该也有效.
ant*_*kiy 15
我知道这是一个老问题.无论如何,它可以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);
Run Code Online (Sandbox Code Playgroud)
Kee*_*ers 14
据我所知,Doctrine不支持使用带有findby的IN()查询.你可以做两件事:
findByStatus(array $statusTypes)在(自定义)'notif'存储库类中实现一个方法.如果您喜欢这种方法,我可以举个例子.
将您的findBy转换为以下内容:
$qb = $this->repos['notif']->createQueryBuilder('n');
$data = $qb->where($qb->expr()->in('status', array(1,2,3)))->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)这应该工作:)
如果您正在使用MongoDB并且需要更复杂的查询,例如"少于"与OR链接在一起但不能使用查询构建器,则这也适用于以下语法:
->findBy(array(
'$or' => array(
array('foo' => array('$lt' => 1234)),
array('$and' => array(
array('bar' => 45678),
array('baz' => array('$lt' => 89013))
))
)
));
Run Code Online (Sandbox Code Playgroud)
或者作为您问题的解决方案:
->findBy(array(
'$or' => array(
array('status' => 1),
array('status' => 2),
array('status' => 3),
)
));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64509 次 |
| 最近记录: |