在学说中无关领域上的秩序

时间:2018-07-13 13:46:41

标签: php symfony doctrine

我有两个数据库表ordersorderdetails。产品的价格在单个订单明细中设置。在订单类中,我像这样计算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;
}

1 个答案:

答案 0 :(得分:2)

可以在sql中完成(甚至使用学说)。
也可以在php中进行处理。
您必须选择一种简单的解决方案。

在sql /准则中,您必须加入orderDetails,按order.id分组,选择order +使用函数SUM(orderDetail.id)-order.id作为小计,最后是orderby小计

在php中,您将必须通过小计方法对对象数组进行排序,有关此操作的信息,请参见这篇文章: https://stackoverflow.com/a/4282423/6324627