Eloquent 多对多,总和等于列值
Eloquent Many to Many Where Sum Equal to a Column Value
我有 Order
和 Invoice
模型,它们具有使用 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同时提供订单和发票型号代码,以便我们查看哪里出错了
我有 Order
和 Invoice
模型,它们具有使用 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同时提供订单和发票型号代码,以便我们查看哪里出错了