Doctrine2 QueryBuilder select 实体和关联实体的数量
Doctrine2 QueryBuilder select entity and count of associated entities
我在使用 ORM QueryBuilder 时遇到了一个大问题。我需要做的是:
我需要获取 order
及其 products
和大量关联实体(与 order
关联)的计数,但我认为它们与此处无关。我还需要按该计数对结果进行排序。
任何人都可以给我一个如何实现的例子吗?如果可能,我想避免使用 "inline" DQL。
您可以通过 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();
}
注意:代码未经测试。
我在使用 ORM QueryBuilder 时遇到了一个大问题。我需要做的是:
我需要获取 order
及其 products
和大量关联实体(与 order
关联)的计数,但我认为它们与此处无关。我还需要按该计数对结果进行排序。
任何人都可以给我一个如何实现的例子吗?如果可能,我想避免使用 "inline" DQL。
您可以通过 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();
}
注意:代码未经测试。