2014-02-05 3 views
0

Я хочу уменьшить нагрузку на базу данных, ограничив количество объединенных объектов.Ограниченные объединенные объекты с Dct доктрины Doctrine

В качестве примера, скажем, у меня есть объект категории со многими отношениями к объекту Product. Затем на сводной странице я хочу показать только первые 5 продуктов каждой категории. Как мне написать DQL?

Я мог бы просто позвонить $category->getProducts() и показать только первые пять, но это кажется расточительным. Я не уверен, что Symfony2/Doctrine делает некоторые магии в фоновом режиме, чтобы улучшить это, но по-прежнему кажется, что должен быть лучший способ ограничить количество объединенных объектов. Я также пробовал использовать ->setMaxResults(), но это мне не поможет.

+0

Вы можете ограниченные строки результата, а не только присоединился. Если вы хотите ограничить соединение, вы должны использовать подзапрос –

ответ

0

С помощью Doctrine вы можете использовать EntityRepository, где вы можете написать свой собственный улучшенный запрос, а не просто позвонить $category->getProducts().

Для DQL сделать что-то вроде

$em = $this->getDoctrine()->getManager(); 
$query = $em->createQuery(' 
    SELECT p 
    FROM AcmeStoreBundle:Product p 
    JOIN AcmeStoreBundle:Category c 
    WHERE p.price > :price 
    ORDER BY p.price ASC 
')->setParameter('price', '19.99'); 

$products = $query->getResult(); 
+0

Я знаю, я просил помощи в написании DQL для него. – Adam

+0

Для этого вы должны показать таблицы, в которые хотите присоединиться –

+0

Спасибо, но я уже использовал DQL. Мне просто интересно, как я могу ограничить продукты, которые объединены в третьей строке вашего запроса. Я не хочу возвращать их всех, и в моей ситуации нет условий, которые я мог бы использовать, чтобы помочь уменьшить число. – Adam

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