我创建了以下存储库和方法。该方法执行您希望它执行的操作,但一件事除外。它不能同时返回->select('ol')
和->select('count(ol.product) as totalProducts')
。一旦我输入->select('ol')
它就会忽略计数。
class OrderLineRepository
{
// ...
public function getOpenOrders()
{
$qb = $this->createQueryBuilder('ol');
$orders = $qb
->select('count(ol.product) as totalProducts')
->select('ol')
->where('BIT_AND(ol.flags, 3) = 2')
->groupBy('ol.orderId')
->setMaxResults(100)
->getQuery()
->getResult()
;
return $orders;
}
// ...
}
我仍处于掌握symfony的早期阶段,这可能是一个相当愚蠢的问题。但这仍然是我目前面临的一个问题。有人可以帮助我吗?
更新
在RiggsFolly的帮助下,我现在通过使用->addSelect(...)
而不是->select(...)
得到以下结果。
array:10 [
// ...
array:2 [
0 => OrderLine {
id: 8068005
product: Product {#1503 ▶}
supplier: Supplier {#1552 ▶}
reference: Reference {#1528 ▶}
}
"products" => "3"
]
// ...
]
理想情况下,我想这样得到它:
array:10 [
// ...
array:2 [
id: 8068005
product: Product {#1503 ▶}
supplier: Supplier {#1552 ▶}
reference: Reference {#1528 ▶}
"products" => "3"
]
// ...
]
我不知道它与OrderLine和产品的关系如何;但也许您可以在它之间创建数据库关系,这样您将获得与您的OrderLine相关的一系列产品。
最后,要获得产品数量:
$productsNumber = count($orderLine->getProducts());
更新
在这种情况下,产品总数将与订单行总数相同,对吗?
所以......在我看来,totalproducts不是OrderLine 属性;它不应该是 OrderLine 对象的一部分,相反,你可以计算 Doctrine 检索到的 OrderLines 对象,它将是你的 totalProduct。
再进一步看,您还可以创建一个与OrderLine
对象相关的Order
实体(一对多(。然后,您可以使用 Doctrine 查询订单实体,并计算Order
实体的OrderLines
属性,该属性将与产品总数相同。