私はDoctrineを初めて使用し、ステートメントにhaving句を追加する方法を見つけようとしています。基本的に、ユーザーが選択した属性の数に基づいて、返されるアイテムをフィルタリングできるようにしたいと考えています。コードは次のとおりです。
// create query builder
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('p')
->from($this->_entityName, 'p')
->leftJoin('p.options', 'o')
->where('p.active = :active')
->setParameter('active', 1);
// add filters
$qb->leftJoin('o.attributes', 'a');
$ands = array();
foreach ($value as $id => $values)
{ echo count($values);
$ands[] = $qb->expr()->andX(
$qb->expr()->eq('a.attribute_id', intval($id)),
$qb->expr()->in('a.attribute_value_id', array_map('intval', $values))
$qb->having('COUNT(*)=3) // THIS DOESN'T WORK
//$qb->expr()->having('COUNT(*)=3) // THIS DOESN'T WORK EITHER
);
}
$where = $qb->expr()->andX();
foreach ($ands as $and)
{
$where->add($and);
}
$qb->andWhere($where);
$result = $qb->getQuery()->getResult();
return $result;
having() 句を使用してステートメントを実行しようとすると、次のエラーが発生します: Expression of type 'Doctrine\ORM\QueryBuilder' not allowed in this context.
having() 句がなければ、すべてが完全に機能します。
これを解決する方法がわかりません。