Я сталкивался с этим несколько раз в прошлом, и я просто закончил писать необработанный SQL-запрос для его преодоления, но я действительно хочу выяснить, почему это происходит. Посмотрите на утверждение ниже
$q = $this->entityManager->createQuery('SELECT um,s,st
FROM Dashboard\Entity\Metric um
JOIN um.stat st
JOIN um.site s
JOIN s.clients c
WHERE c.id = ?1
AND s.competitor = 0
AND s.ignored = 0
AND st.id IN (?2)
GROUP BY s.id, st.id
ORDER BY st.response_field, s.id')
->setParameter(1, $params['c_id'])
->setParameter(2, $statId);
$sql = $q->getSql();
$rs = $q->getResult();
Если я возьму содержимое $sql
и вставлю его в инструмент mySQL и выполню необработанный запрос, он вернет 18 правильных результатов.
Однако $rs
содержит только 3 результата. $statId
- строка из 6 чисел, разделенных запятыми: (1,2,3,4,5,6). Поэтому я группируюсь по st.id
и s.id
. Для каждого элемента st.id
будет 3 s.id
элементов, что соответствует 18 ожидаемым результатам. Происходит то, что Доктрина возвращает только первый st.id
, который является группой из 3 s.id
s
Есть идеи, что может быть причиной этого?