我有两个数据库表orders
和orderdetails
。产品的价格在单个订单明细中设置。在订单类中,我像这样计算subTotalAmount
(一个计算字段):
Order.php
private $subTotalAmount;
public function calculateSubTotalAmount(){
$subtotal = 0;
foreach ($this->getOrderDetails() as $detail) {
$subtotal = $subtotal + $detail->getPrice();
}
$subtotal = $subtotal -$this->getDiscount();
return $subtotal;
}
public function getSubTotalAmount()
{
$this->subTotalAmount = $this->calculateSubTotalAmount();
return $this->subTotalAmount;
}
我希望能够通过该字段进行排序,但是由于它是未关联的,因此当我尝试时会出现错误:
[语义错误]第0行,“ subTotalAmount”附近的第135行:错误: App \ Entity \ Order类没有命名的字段或关联 subTotalAmount
可以通过此字段进行订购吗?
我要在其中实现的查询是:
public function searchAndSort($term, $sortAttribute, $sortOrder)
{
$qb = $this->createQueryBuilder('po');
$qb->andWhere('po.invoiceNumber LIKE :term or u.email LIKE :term')
->LeftJoin('po.orderedBy', 'u')
->setParameter('term', '%'.$term.'%')
->orderBy($sortAttribute, $sortOrder)
->getQuery()->getResult();
return $qb;
}
答案 0 :(得分:2)
可以在sql中完成(甚至使用学说)。
也可以在php中进行处理。
您必须选择一种简单的解决方案。
在sql /准则中,您必须加入orderDetails,按order.id分组,选择order +使用函数SUM(orderDetail.id)-order.id作为小计,最后是orderby小计
在php中,您将必须通过小计方法对对象数组进行排序,有关此操作的信息,请参见这篇文章: https://stackoverflow.com/a/4282423/6324627