Doctrine orm 或按原则查找中的操作员

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运算符一样运

我想在原则中使用OR运算符和find by,但不想使用查询生成器

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
    /raw
    SQL
    直接运行查询

  • 不幸的是,这两种方法都包括编写某种查询语言。我个人觉得
    QueryBuilder
    有点混乱,尤其是对于更复杂的查询,所以如果您是新手,我建议您从纯
    DQL
    开始