Get()方法拉取数据然后foreach

Get() method to pull data and then foreach

我打算使用 get() 方法从 orderDetail table 中提取所有具有相同订单 ID 的行,然后循环将税列的所有值添加到 $total_ 变量。然后我打算将 $total_ 添加到卖家余额中。

我想获得列中用相同 order_id 提取的税值总和。我尝试使用 sum() 但似乎仍然存在错误。唯一有用的是当我使用 first() 时它只得到我的条件为真的第一行。但那样的话,我只能使用一个税值。在某些情况下,我有两个具有相同 order_id 的项目(当我们在购物车中有不同的产品时)。他们以相同的 order_id 进入数据库。所以,我现在正在寻找一种方法来提取具有相同 order_id 的所有行,然后获取税列的总和。

if ($request->status == 'cancelled' && $order->payment_status == 'paid') {
    $commissionHistoriesnow = \App\Models\CommissionHistory::where('order_id', $request->order_id)->get();
    $total__ = 0;
    foreach ($commissionHistoriesnow as $key => $commissionHistorynow) {
        if($commissionHistorynow->admin_commission != null) {
            $total__ += $commissionHistorynow->admin_commission;
        }
    }
    $seller = Seller::where('user_id', $commissionHistoriesnow->seller_id)->first();
    $seller->admin_to_pay += $total__;
    $seller->save();
}

您可以使用生成器的 sum 方法为您获取该列的总和,而无需检索所有记录并迭代它们:

$total = CommissionHistory::where('order_id', $request->order_id)
    ->sum('admin_commission');

补充:

此外,您可以在模型上使用 increment 方法来增加 'admin_to_pay' 字段并在数据库中更新它(这将触发模型事件):

$seller->increment('admin_to_pay', $total);

如果您不担心事件并且在这种情况下只有一条记录,您可以调用构建器本身的 increment 来更新您正在查询的记录:

Seller::where('user_id', $commissionHistoriesnow->seller_id)->increment('admin_to_pay', $total);

Laravel 8.x Docs - Queries - Running Database Queries - Aggregates sum

Laravel 8.x Docs - Eloquent - Retrieving Single Models / Aggregates - Retrieving Aggregates sum

Laravel 8.x Docs - Queries - Update Statements - Increment & Decrement increment