在Doctrine中的查询构建器中使用Criteria对象

时间:2018-02-23 17:30:33

标签: symfony doctrine query-builder

我有2个查询构建器。一个用于获取所有结果(分页),另一个用于获取总计数。 这些查询的条件几乎相同,因此我想使用Criteria对象随后附加到查询构建器。

  $queryBuilder = $this->createQueryBuilder('vo');;

  $criteria = Criteria::create();
  $criteria->where(Criteria::expr()->eq("vo.creator", $currentUser));
  $criteria->where(Criteria::expr()->eq("vo.other", $something));

  $queryBuilder->addCriteria($criteria);

问题是:在很多AND中间我也有OR。只是在一个普通的查询构建器中,它读取:

$criteria->andWhere('vo.public = :isPublic OR vo.offerID IN (:sharedOfferIDs)');

使用Laravel Eloquent,你可以很好地做到这一点

->where('vo.creator', '=', $currentUser)
    ->orWhere(function ($query) {
         query->where('vo.public ', '=', true)
              ->where('vo.offerID', 'in', [3, 4]');
        })

为了更清楚,我希望结果SQL类似于:

where vo.creator = $currentUser AND (vo.public = true OR vo.offerID in [3, 4])

如何使用Doctrine Criteria对此进行归档?

1 个答案:

答案 0 :(得分:0)

这样的事情:

.focus