【问题标题】:Eloquent Many to Many Where Sum Equal to a Column Value雄辩的多对多总和等于列值
【发布时间】:2021-08-31 21:00:46
【问题描述】:

我有 OrderInvoice 模型,它们具有使用 OrderInvoice 枢轴连接的多对多关系。这些表具有属性:

order
-----
id
total

invoice
-------
id
total

order_invoice
-------------
order_id
invoice_id
subtotal

我想获取每个Order 的发票总和小计(来自枢轴)小于Order 总和。这包括Order,它根本没有发票。 如何使用 eloquent 查询构建器实现这一目标?

【问题讨论】:

    标签: laravel eloquent laravel-query-builder


    【解决方案1】:

    如果我正确理解了您的问题,那么您可以执行以下操作。

    $order=\App\Models\Order::query()->whereHas("invoice",function ($query){
            $query->havingRaw('orders.total>sum(order_invoice.subtotal)')->groupBy('order_id');
        })->orDoesntHave("invoice")
            ->get();
    

    如果您仍然有错误,请同时发布订单和发票型号代码,以便我们查看哪里出错

    【讨论】:

    • 不错的答案。有用。但问题是我还想包括根本没有发票的订单。我该如何改进上面的代码? (我也会编辑我的问题)
    【解决方案2】:

    // 模型名称 订单模式

    public function order_invoice()
        {
            return $this->belongsToMany('App\Order_invoice')->withTimestamps();
        }
    
    
    $total_invoice_count = Order::order_invoice()->count('order_id');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2014-05-23
      • 2023-04-03
      • 2015-03-31
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多