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');
    }
}