2016-12-21 4 views
0

У меня возникла огромная проблема с ORM QueryBuilder. Что мне нужно сделать: Мне нужно получить order со счетом products и множеством связанных объектов (связанных с order), но я предполагаю, что они здесь не актуальны. Мне также нужно заказать результат по этому счету.Doctrine2 QueryBuilder выбрать сущность и количество связанных объектов

Может ли кто-нибудь дать мне пример того, как это можно достичь? Я хотел бы избегать «встроенных» DQL, если это возможно.

+0

Я думаю о 2 решениях. Во-первых, чтобы сохранить количество товаров в таблице заказа, тогда вы избежите сложного и медленного запроса. Во-вторых, использовать DQL с [DTO] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#new-operator-syntax) object –

+0

Или вы считаете в PHP, если уже используете продукты. –

+0

@ skowron-line это нежизнеспособно, потому что на следующем этапе мне нужно будет отфильтровать «счет» по статусу продукта и, таким образом, он будет обновляться очень часто. Я бы хотел избежать ненужных обновлений для упорядочивания поля. Также это идет вразрез с нормализацией. – user1970395

ответ

2

Вы можете получить данные через Doctrine Query Builder.

Предполагается, что вы должны присоединиться к продуктам от Order, а затем группировать по идентификатору заказа. Вы можете иметь COUNT(product.id) в своем заявлении select и использовать псевдоним в order by, чтобы упорядочить ваши заказы. Ниже приведен небольшой фрагмент кода от Repository.

/** 
* @return \Doctrine\ORM\Query 
*/ 
public function getHotelAndRoomType() 
{ 
    $qb = $this->createQueryBuilder('order') 
     ->select('partial order.{id, orderId} as order, count(product.id) as total_products_in_order') 
     ->leftJoin('AppBundle:Product', 'product', 'WITH', 'product.order = order.id') 
     ->groupBy('order.id') 
     ->orderBy('total_products_in_order', 'DESC') 
    ; 

    return $qb->getQuery()->execute(); 
} 

Примечание: код не проверен.

+0

Работает как и ожидалось, это правильное решение, которое я искал. – user1970395