Php 仅在一个Laravel pivot记录上更新附加列时出现问题
当尝试仅更新透视表的一条记录时,此方法将使用相同的Php 仅在一个Laravel pivot记录上更新附加列时出现问题,php,laravel-5,Php,Laravel 5,当尝试仅更新透视表的一条记录时,此方法将使用相同的order\u id和user\u id更新所有记录。只应更新与订单id、用户id、状态id和完成时间=null匹配的记录 public function pause($id) { $order = Order::find($id); $now = Carbon::now(); $stage = Status::find($order->status_id)->stage_id; $users = $
order\u id
和user\u id
更新所有记录。只应更新与订单id
、用户id
、状态id
和完成时间=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);
}
在运行暂停方法之前:
运行暂停方法后:
如果您只是从给定的顺序中抓取所有用户,您可以遍历这些用户并更新他们的数据透视记录,如下所示:
// 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);
}