2013-03-03 4 views
0

У меня есть простой запрос с внутренним соединениемSymfony ORM доктрины запросов

$qb = $this->createQueryBuilder('r') 
    ->innerJoin('UserBundle:User', 'u') 
    ->where('r.nick = u.id') 
    ->andWhere('r.odobera=:id') 
    ->setParameter('id', $id) 
    ->orderBy('r.time', 'DESC') 
    ->setMaxResults(50); 

return $qb->getQuery()->getResult(); 

Он должен быть один правильный запрос? Но в профилировщике у меня есть

SELECT t0.username AS [...] FROM users t0 WHERE t0.id = ? LIMIT 1 
Parameters: [1465] 
[Display runnable query] 
Time: 1.79 ms [ Explain query ] 
SELECT r0_.id AS id0, [...] FROM requests r0_ INNER [...] ORDER BY r0_.time DESC LIMIT 50 
Parameters: [1465] 
[Display runnable query] 
Time: 0.67 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['2072'] 
[Display runnable query] 
Time: 0.64 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['2386'] 
[Display runnable query] 
Time: 0.50 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['79'] 
[Display runnable query] 
Time: 0.50 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['2432'] 
[Display runnable query] 
Time: 0.50 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['40'] 
[Display runnable query] 
Time: 0.52 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['2090'] 
[Display runnable query] 
Time: 0.46 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['1044'] 
[Display runnable query] 
Time: 0.51 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['27'] 
[Display runnable query] 
Time: 0.54 ms [ Explain query ] 

один запрос для каждого «соединения» для каждой записи ... ПОЧЕМУ?

PS: этот текст только для того, чтобы сделать это сообщение дольше, потому что я не могу отправить вопрос с «просто» так много деталей .. но я думаю, что моя проблема объясняется очень хорошо. BTW: я спросил друга, и у него есть аналогичная проблема)

ответ

0

Вы не указали, что выбрать, так что просто requests где гидратированный.

Вы можете указать, что гидрат с select() методом на построителе запросов:

$qb = $this->createQueryBuilder('r') 
    ->select(array('r', 'u')) 
    ->innerJoin('UserBundle:User', 'u') 
    ->where('r.nick = u.id') 
    ->andWhere('r.odobera=:id') 
    ->setParameter('id', $id) 
    ->orderBy('r.time', 'DESC') 
    ->setMaxResults(50); 

return $qb->getQuery()->getResult(); 
+0

гм ... это вызывает у меня проблемы ... не Symfony догадки выбрать на основе отношений в сущностях? Потому что теперь дамп результата выглядит хорошо .. запрашивает объект с свойством nick, который является прокси для пользовательского объекта ... но когда я добавляю вашу часть кода, он выглядит странно, и я не могу передать результаты на ветку и получить к ним доступ, как для последователя в последователях или что-то в этом роде ... check screen: http://www.upnito.sk/0/5u5ztfusawxq5pk7uab7f3e49sr9h534.png – EnchanterIO

+1

Symfony не имеет к этому никакого отношения. Это чисто доктрина. Я обновил свой ответ, так как изначально я ошибся в том, как вы должны указывать поля, которые вы хотите выбрать. –

+0

тот же результат – EnchanterIO

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