Doctrine Query Builder를 통해 데이터를 얻을 수 있습니다.
Order
에서 제품을 가입시킨 다음 주문 ID별로 그룹화해야합니다. select 문에 COUNT(product.id)
을 입력하고 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();
}
참고 : 코드 테스트를 거치지 않았습니다.
약 2 가지 해결책이 있다고 생각합니다. 먼저 주문 테이블에 제품 수를 유지 한 다음 복잡하고 느린 쿼리는 피할 수 있습니다. 두 번째는 DQL을 [DTO] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#new-operator-syntax)와 함께 사용하는 것입니다. object –
또는 제품을 이미 가져온 경우 PHP로 계산합니다. –
@ skowron-line 이것은 다음 단계에서 제품의 상태로 "개수"를 필터링해야하기 때문에 실용적이지 않으므로 실제로 자주 업데이트 될 것입니다. 난 순서대로 필드를 계산하는 불필요한 업데이 트를 피고 싶습니다. 또한 정상화에 반대합니다. – user1970395