Laravel:如何在不首先使用数据透视表的情况下更新数据透视表
我是新来的。我想更新我的叶数据透视表。我正在尝试使用下面的代码,但它只更新了一行,我在db中有多行具有相同的leave_id,我想在leave_id=xyz的地方更新所有这些 我的模型假期中有以下功能: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
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循环..谢谢老兄。它起作用了,不客气。