Laravel:如何在不首先使用数据透视表的情况下更新数据透视表

Laravel:如何在不首先使用数据透视表的情况下更新数据透视表,laravel,laravel-5,pivot,pivot-table,Laravel,Laravel 5,Pivot,Pivot Table,我是新来的。我想更新我的叶数据透视表。我正在尝试使用下面的代码,但它只更新了一行,我在db中有多行具有相同的leave_id,我想在leave_id=xyz的地方更新所有这些 我的模型假期中有以下功能: public function relLeave(){ return $this->belongsToMany(User::class)->withPivot('days'); } 离场控制员: public function saveUpdate(Request $r

我是新来的。我想更新我的叶数据透视表。我正在尝试使用下面的代码,但它只更新了一行,我在db中有多行具有相同的leave_id,我想在leave_id=xyz的地方更新所有这些

我的模型假期中有以下功能:

public function relLeave(){

    return $this->belongsToMany(User::class)->withPivot('days');

}
离场控制员:

public function saveUpdate(Request $request)
{
  $leave = Leave::find($request->id);
  $msg = $leave->relLeave()->Where('leave_id', $request->id)->get()->first();
 $msg->pivot->days = $request->days;
 $msg->pivot->save();
}

更新关系时,可以更新透视表中的额外字段

$leave->relLeave()->sync([$request['id'] => ['days' => $request['days']]]);

如果是一个选项,则可以使用查询生成器:

DB::table('leave_user')->where('leave_id', $request->id)->update(['days' => $request->days]);
这只是一个DB查询,非常简单

如果您想要有说服力的解决方案,请在循环中使用:

$leave = Leave::find($request->id);
$usersIds = $leave->relLeave()->pluck('id')->toArray();
foreach ($usersIds as $userId) {
     $leave->relLeave()->updateExistingPivot($userId, ['days' => $request->days]);
}

我遵循@option的指示,它对我有效我删除了第一个()

下面是我的更新代码

     $msg = $leave->relLeave()->Where('leave_id', $request->id)->get();
        foreach($msg as $msgs)
        {
            $msgs->pivot->days = $request->days;
            $msgs->pivot->save();
        }

它只会在您运行
->get()->first()时更新第一个尝试将其更改为仅
->get()
然后
dd($msg)
以确保正确获取。如果它真的运行了一个简单的foreach循环..谢谢老兄。它起作用了,不客气。