Я новичок в Доктрине, и я пытаюсь выяснить, как добавить предложение 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;
При попытке выполнить оператор с имея() п я получаю эту ошибку: Выражения типа «Учение \ ORM \ QueryBuilder» не имеет в этом контексте.
Без условия have() все работает отлично.
Я понятия не имею, как это решить.
Только для ударов: $ qb-> having ('count (*) = 3'); Обратите внимание на пробелы вокруг =. Раньше была ошибка. Похоже, теперь это будет исправлено, но, возможно, нет. – Cerad
Я по-прежнему получаю ту же ошибку, я также не нашел никакой информации об ошибке. Я даже не могу найти примеры того, как это используется. –
Как я уже сказал, это старая ошибка. На самом деле не ожидал, что это сработает. Запрос, как опубликовано, слишком сложный для меня. Я бы предложил сделать простой DQL с предложением HAVING, а затем изучить сгенерированный sql и проверить работу запроса. Затем начните добавлять вещи. На простой вопрос с одним лайнером будет легче ответить. – Cerad