2012-07-03 3 views
1

У меня есть запрос доктрины, чтобы вернуть всех моих клиентов, принадлежащих к определенному магазину. В общей сложности возвращается 29 записей. Тем не менее, если я бегу счетчика запросов, с почти одинаковым DQL, я получаю разное количество результатовДоктрина: Результаты подсчета возвращают больше, чем получают результаты

QUERY1 - Fetch Результаты:

SELECT c FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3) 

возвращений (с использованием счета() для подсчета количества записи возвращаются)

int(29) 


Query2 - граф Результаты:

SELECT count(c) FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3) 

Retruns:

array(1) { [0]=> array(1) { [1]=> string(2) "36" } } 


Я не могу показаться, чтобы работать, как это может происходить? Надеюсь, кто-то может помочь ...

+0

Кстати, выбор правилен, в этих двух магазинах назначено 29 уникальных клиентов. Я предполагаю, что 36 включают дубликаты, но почему один и тот же запрос возвращает другой список? – YorkshireDeveloper

+0

Как насчет 'count (*)' или 'count (id)'? – Maerlyn

+0

count (id) возвращает тот же результат, и вы не можете делать счет (*) в доктрине. Кажется, что есть подразумеваемый DISTINCT где-то, о котором я не просил ... – YorkshireDeveloper

ответ

1

Вы должны учитывать ситуацию, когда, если у вас есть один и тот же клиент с объединением с двумя магазинами, в сыром Земля SQL вы получите 2 строки.

Doctrine учитывает это на этапе гидратации, возвращая ваши записи, то есть $qb->getQuery()->getResults(), и возвращает вам набор результатов, который имеет смысл (а не один с дубликатами, которые вам придется обрабатывать вручную).

Вы можете лучше визуализировать эту разницу, вторя из СКП, что доктрина создает из вашего запроса $qb->getSQL() и выполнение его через что-то вроде PhpMyAdmin, MySQL Workbench или Sequel Pro - и сравнивая, что с результатом вернулся из getResults()

Смежные вопросы