Doctrine orm 或按原则查找中的操作员
我想在原则中使用OR运算符和find by,但不想使用查询生成器Doctrine orm 或按原则查找中的操作员,doctrine-orm,Doctrine Orm,我想在原则中使用OR运算符和find by,但不想使用查询生成器 return $this->repository->findBy( array('status' => 1, 'flag' =>1, 'contentType' => 'news'), array('created' => 'DESC'), $limit ); 我希望这个查询像staus 1或flag 1一样运行,但它像AND运算符一样运
return $this->repository->findBy(
array('status' => 1, 'flag' =>1, 'contentType' => 'news'),
array('created' => 'DESC'),
$limit
);
我希望这个查询像staus 1或flag 1一样运行,但它像AND运算符一样运行
谢谢 我知道这可能对您没有多大帮助,因为您不想求助于
QueryBuilder
,但如果您改变主意,我还是会发布它,因为我还没有找到向findBy
添加此类条件的方法
由于EntityRepository
实现了Doctrine\Common\Collections\selective
,您可以添加标准来进一步筛选/查找结果。API的酷之处在于它支持存储库
、集合
和惰性集合
简单地说,添加使用条令\Common\Collections\Criteria代码>在存储库文件的顶部,我们可以定义一个单独的方法,以便更清楚地定义我们的标准,如下所示:
public function addStatusOrFlagCriteria() {
$expr = Criteria::expr();
$criteria = new Criteria();
$criteria
->where(
$expr->orX(
$criteria->expr()->eq('flag', 1),
$criteria->expr()->eq('flag', 0)
)
)
->orderBy(array('id' => 'ASC'))
;
return $criteria;
}
然后,根据调用存储库方法的方式判断,使用以下标准:
$result = $this->repository->matching(
$this->repository->addStatusOrFlagCriteria()
);
默认情况下,它将返回条令\ORM\LazyCriteriaCollection
条令在其findBy()
方法中不支持或操作。您有两个选择:
扩展您的$this->repository
以包含您自己的自定义查找方法,该方法将支持或操作。更多细节
使用QueryBuilder
/DQL
/rawSQL
直接运行查询
不幸的是,这两种方法都包括编写某种查询语言。我个人觉得QueryBuilder
有点混乱,尤其是对于更复杂的查询,所以如果您是新手,我建议您从纯DQL
开始