Eloquent 多对多,总和等于列值

Eloquent Many to Many Where Sum Equal to a Column Value

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

order
-----
id
total

invoice
-------
id
total

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

我想获取每个 Order 的发票总和 小计 (来自数据透视表)小于 Order 总数。这包括根本没有发票的 Order。 我怎样才能使用 eloquent 查询构建器实现这一点?

// 型号名称 订单型号

public function order_invoice()
    {
        return $this->belongsToMany('App\Order_invoice')->withTimestamps();
    }


$total_invoice_count = Order::order_invoice()->count('order_id');

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

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

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