Laravel 8 更新数据透视 table 如果表单中没有任何内容被编辑
Laravel 8 update pivot table if nothing was edited in the form
我有一个带有额外字段 ('tugas_1'-'tugas_10') 和枚举类型的数据透视表 table,此更新的重点是修改这些字段。
问题是,如果用户打开模态表单,然后在不做任何更改的情况下提交,页面就会变成空白,但如果我更改一个或多个字段,它就可以工作。如果我只使用 updateExistingPivot 方法就会发生这种情况,所以我通过首先检查旧值是否与请求表单值相同来解决这个问题,然后它将 运行 同步方法。但是还有其他方法可以解决这个问题吗?我的代码看起来一团糟,如果你知道如何让它变得简单,我将不胜感激
这是我在控制器上的编辑方法。
public function edit(Request $request, $id_angkatan, $id_semester, $id) {
$peserta = Peserta::where('id', $id)->first();
$tugas = $peserta->semestertugas()->where('semester_id', $id_semester)->first();
if($tugas->pivot->tugas_1 == $request->tugas_1 &&
$tugas->pivot->tugas_2 == $request->tugas_2 &&
$tugas->pivot->tugas_3 == $request->tugas_3 &&
$tugas->pivot->tugas_4 == $request->tugas_4 &&
$tugas->pivot->tugas_5 == $request->tugas_5 &&
$tugas->pivot->tugas_6 == $request->tugas_6 &&
$tugas->pivot->tugas_7 == $request->tugas_7 &&
$tugas->pivot->tugas_8 == $request->tugas_8 &&
$tugas->pivot->tugas_9 == $request->tugas_9 &&
$tugas->pivot->tugas_10 == $request->tugas_10){
$query = $peserta->semestertugas()->sync($id_semester,
[
'tugas_1' => $tugas->pivot->tugas_1 = $request->tugas_1,
'tugas_2' => $tugas->pivot->tugas_2 = $request->tugas_2,
'tugas_3' => $tugas->pivot->tugas_3 = $request->tugas_3,
'tugas_4' => $tugas->pivot->tugas_4 = $request->tugas_4,
'tugas_5' => $tugas->pivot->tugas_5 = $request->tugas_5,
'tugas_6' => $tugas->pivot->tugas_6 = $request->tugas_6,
'tugas_7' => $tugas->pivot->tugas_7 = $request->tugas_7,
'tugas_8' => $tugas->pivot->tugas_8 = $request->tugas_8,
'tugas_9' => $tugas->pivot->tugas_9 = $request->tugas_9,
'tugas_10' => $tugas->pivot->tugas_10 = $request->tugas_10
]);
if ($query){
return back()->with('pesan', 'Tugas peserta berhasil diedit');
}
}
else{
$query = $peserta->semestertugas()->updateExistingPivot($id_semester,
[
'tugas_1' => $tugas->pivot->tugas_1 = $request->tugas_1,
'tugas_2' => $tugas->pivot->tugas_2 = $request->tugas_2,
'tugas_3' => $tugas->pivot->tugas_3 = $request->tugas_3,
'tugas_4' => $tugas->pivot->tugas_4 = $request->tugas_4,
'tugas_5' => $tugas->pivot->tugas_5 = $request->tugas_5,
'tugas_6' => $tugas->pivot->tugas_6 = $request->tugas_6,
'tugas_7' => $tugas->pivot->tugas_7 = $request->tugas_7,
'tugas_8' => $tugas->pivot->tugas_8 = $request->tugas_8,
'tugas_9' => $tugas->pivot->tugas_9 = $request->tugas_9,
'tugas_10' => $tugas->pivot->tugas_10 = $request->tugas_10
]);
if ($query){
return back()->with('pesan', 'Tugas peserta berhasil diedit');
}
}
}
这是编辑表单视图
这是 table 视图
这是支点table
希望你能看懂我的解释!
没有变化就不用更新了。也许你追求的是不分离的同步
public function edit(Request $request, $id_angkatan, $id_semester, $id)
{
$peserta = Peserta::where('id', $id)->first();
$query = $peserta->semestertugas()->syncWithoutDetaching([$id_semester => [
'tugas_1' => $request->tugas_1,
'tugas_2' => $request->tugas_2,
'tugas_3' => $request->tugas_3,
'tugas_4' => $request->tugas_4,
'tugas_5' => $request->tugas_5,
'tugas_6' => $request->tugas_6,
'tugas_7' => $request->tugas_7,
'tugas_8' => $request->tugas_8,
'tugas_9' => $request->tugas_9,
'tugas_10' => $request->tugas_10,
]]);
if ($query) {
return back()->with('pesan', 'Tugas peserta berhasil diedit');
}
}
我有一个带有额外字段 ('tugas_1'-'tugas_10') 和枚举类型的数据透视表 table,此更新的重点是修改这些字段。
问题是,如果用户打开模态表单,然后在不做任何更改的情况下提交,页面就会变成空白,但如果我更改一个或多个字段,它就可以工作。如果我只使用 updateExistingPivot 方法就会发生这种情况,所以我通过首先检查旧值是否与请求表单值相同来解决这个问题,然后它将 运行 同步方法。但是还有其他方法可以解决这个问题吗?我的代码看起来一团糟,如果你知道如何让它变得简单,我将不胜感激
这是我在控制器上的编辑方法。
public function edit(Request $request, $id_angkatan, $id_semester, $id) {
$peserta = Peserta::where('id', $id)->first();
$tugas = $peserta->semestertugas()->where('semester_id', $id_semester)->first();
if($tugas->pivot->tugas_1 == $request->tugas_1 &&
$tugas->pivot->tugas_2 == $request->tugas_2 &&
$tugas->pivot->tugas_3 == $request->tugas_3 &&
$tugas->pivot->tugas_4 == $request->tugas_4 &&
$tugas->pivot->tugas_5 == $request->tugas_5 &&
$tugas->pivot->tugas_6 == $request->tugas_6 &&
$tugas->pivot->tugas_7 == $request->tugas_7 &&
$tugas->pivot->tugas_8 == $request->tugas_8 &&
$tugas->pivot->tugas_9 == $request->tugas_9 &&
$tugas->pivot->tugas_10 == $request->tugas_10){
$query = $peserta->semestertugas()->sync($id_semester,
[
'tugas_1' => $tugas->pivot->tugas_1 = $request->tugas_1,
'tugas_2' => $tugas->pivot->tugas_2 = $request->tugas_2,
'tugas_3' => $tugas->pivot->tugas_3 = $request->tugas_3,
'tugas_4' => $tugas->pivot->tugas_4 = $request->tugas_4,
'tugas_5' => $tugas->pivot->tugas_5 = $request->tugas_5,
'tugas_6' => $tugas->pivot->tugas_6 = $request->tugas_6,
'tugas_7' => $tugas->pivot->tugas_7 = $request->tugas_7,
'tugas_8' => $tugas->pivot->tugas_8 = $request->tugas_8,
'tugas_9' => $tugas->pivot->tugas_9 = $request->tugas_9,
'tugas_10' => $tugas->pivot->tugas_10 = $request->tugas_10
]);
if ($query){
return back()->with('pesan', 'Tugas peserta berhasil diedit');
}
}
else{
$query = $peserta->semestertugas()->updateExistingPivot($id_semester,
[
'tugas_1' => $tugas->pivot->tugas_1 = $request->tugas_1,
'tugas_2' => $tugas->pivot->tugas_2 = $request->tugas_2,
'tugas_3' => $tugas->pivot->tugas_3 = $request->tugas_3,
'tugas_4' => $tugas->pivot->tugas_4 = $request->tugas_4,
'tugas_5' => $tugas->pivot->tugas_5 = $request->tugas_5,
'tugas_6' => $tugas->pivot->tugas_6 = $request->tugas_6,
'tugas_7' => $tugas->pivot->tugas_7 = $request->tugas_7,
'tugas_8' => $tugas->pivot->tugas_8 = $request->tugas_8,
'tugas_9' => $tugas->pivot->tugas_9 = $request->tugas_9,
'tugas_10' => $tugas->pivot->tugas_10 = $request->tugas_10
]);
if ($query){
return back()->with('pesan', 'Tugas peserta berhasil diedit');
}
}
}
这是编辑表单视图
这是 table 视图
这是支点table
希望你能看懂我的解释!
没有变化就不用更新了。也许你追求的是不分离的同步
public function edit(Request $request, $id_angkatan, $id_semester, $id)
{
$peserta = Peserta::where('id', $id)->first();
$query = $peserta->semestertugas()->syncWithoutDetaching([$id_semester => [
'tugas_1' => $request->tugas_1,
'tugas_2' => $request->tugas_2,
'tugas_3' => $request->tugas_3,
'tugas_4' => $request->tugas_4,
'tugas_5' => $request->tugas_5,
'tugas_6' => $request->tugas_6,
'tugas_7' => $request->tugas_7,
'tugas_8' => $request->tugas_8,
'tugas_9' => $request->tugas_9,
'tugas_10' => $request->tugas_10,
]]);
if ($query) {
return back()->with('pesan', 'Tugas peserta berhasil diedit');
}
}