仅在一个Laravel透视记录上更新附加列时出现问题

时间:2016-05-02 16:07:52

标签: php laravel-5

尝试更新pivot_table的一条记录时,此方法会使用相同的order_iduser_id更新所有记录。只应更新与order_iduser_idstatus_idfinished_at = null匹配的记录。

public function pause($id)
{
    $order = Order::find($id);
    $now = Carbon::now();
    $stage = Status::find($order->status_id)->stage_id;

    $users = $order
        ->user()
        ->where('status_id', $order->status_id)
        ->where('finished_at', null)
        ->get();

    foreach($users as $user)
    {
        $user->pivot->finished_at = $now;
        $user->pivot->save();
    }

    flash()->success('Progress paused for order #' . $order->order_number .'.');
    return redirect('/department/' . $stage);

}

在运行暂停方法之前: image before running pause method

运行暂停后的方法: image after running pause method

1 个答案:

答案 0 :(得分:1)

如果你只是抓住给定订单中的所有用户,你可以迭代它们并像这样更新他们的数据透视记录:

// set finished_at time for all users
foreach($users as $user)
{
    $user->order()
         ->wherePivot('status_id', $order->status_id)
         ->wherePivot('finished_at', null)
         ->updateExistingPivot($order->id, [ 'finished_at' => $now ], false);
}