2013-11-18 5 views
3

У меня есть отношение MN между таблицей USER и CATEGORY. Проблема возникает, когда пользователь имеет более 100 интересов. Когда я выполняю очень простой запрос, как это:Оптимизация доктрины Symfony

return $this->createQueryBuilder('usercategory') 
     ->innerJoin('usercategory.user', 'u') 
     ->innerJoin('usercategory.category', 'c') 
     ->where('u.id = :user_id') 
     ->setParameter('user_id', $user_id) 
     ->getQuery() 
     ->getResult(); 

Symfony профайлер сообщил, что более 100 запросов выполняются с более чем 150мс времени для выполнения. 90% этих запросов похожи

SELECT t0.category_name AS category_name1,t0.type AS type2, t0.status AS status3, t0.category_id AS category_id4, t0.parent_id AS parent_id5 FROM categories t0 WHERE t0.category_id = ? 

Это среднее, если пользователь имеет 100 категорий, доктрина будет выполнять 100 запрос для извлечения всех.

Я делаю что-то неправильно и как могу использовать это быстрее, используя DQL?

ТНХ, Милош

+4

-> addSelect ('c') приведет к тому, что категории будут возвращены из вашего запроса (в отличие от ленивой загрузки их). – Cerad

+0

Да, все. СПАСИБО!!! – Milos

+2

@Cerad Пожалуйста, сделайте свой комментарий как ответ, чтобы я мог его принять. THX снова! – Milos

ответ

4
->addSelect('c') 

заставит категории должны быть возвращены из запроса (в отличие от отложенной загрузки их).

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