代码之家  ›  专栏  ›  技术社区  ›  Dirk J. Faber

论学说中的无关联领域秩序

  •  0
  • Dirk J. Faber  · 技术社区  · 7 年前

    我有两个数据库表, 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行,第135列,靠近“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 回复  |  直到 7 年前
        1
  •  2
  •   Constantin    7 年前

    在sql中也可以这样做(即使有条令)。

    你必须选择一个对你来说容易的解决方案。

    在sql/doctrine中,您必须加入orderDetails,group by order.id,选择order+使用函数SUM(orderDetail.id)-order.id作为subtotal,最后是orderby subtotal

    在php中,必须按照subtotal方法对对象数组进行排序,请参阅本文了解如何执行此操作: https://stackoverflow.com/a/4282423/6324627