如何使用另一个外键在数据透视表中的Laravel中使用同步

时间:2019-09-06 12:21:37

标签: laravel-5 pivot-table

我有一个数据透视表,当我必须添加或删除行时,我正在使用同步。问题是我有一个week_day_id,这在必须删除或添加行时很重要。仅当id和week_day_id都匹配时,我才需要同步。

我经常尝试:

$ routine-> exercises()-> detach($ exercisesList);

$ routine-> exercises()-> attach($ exercisesList);

这:

$ routine-> exercises()-> syncWithoutDetaching($ exercisesList);

控制器:

公共函数update(UpdateRoutineRequest $ request,例程$ routine){

// $ routine =例程:: where('user_id',Auth :: guard('api')-> id())-> get();

    $this->authorize('update', $routine);
    $routine->name = $request->get('name', $routine->name);
    $routine->description = $request->get('description', $routine->description);

    $exercisesIds = array();


    foreach($request->exercises as $exercise) {
        $arrayTemp = $exercise['exercise_id'];

        array_push($exercisesIds, $arrayTemp);
    }

    $exercisesList = array_combine($exercisesIds, $request->exercises);

    $routine->save();

    $routine->exercises()->syncWithoutDetaching($exercisesList);

    return fractal()
        ->item($routine)
        ->parseIncludes(['user', 'exercises'])
        ->transformWith(new RoutineTransformer)
        ->toArray();
}

表: https://firebasestorage.googleapis.com/v0/b/flutter-varios-b4a94.appspot.com/o/exercises_table.PNG?alt=media&token=48836a3d-a34f-41cc-8566-fa6bf623a697

https://firebasestorage.googleapis.com/v0/b/flutter-varios-b4a94.appspot.com/o/pivot_table.PNG?alt=media&token=8cee7aa8-1c90-4c52-9f3f-1096cc6800e2

https://firebasestorage.googleapis.com/v0/b/flutter-varios-b4a94.appspot.com/o/routines_table.PNG?alt=media&token=28322c00-4e8c-48d2-b647-9a94a68f91dc

我期望的是,当我使用同步添加带有练习的新例程时,在控制器中,我需要将其删除或添加它,具体取决于是否添加了练习。本部分工作正常。问题在于数据透视表中的每一行都有一个week_day_id,然后必须与此ID匹配。

现在,如果我添加或删除例程,则不必关心week_day_id。它必须删除或添加所有具有例程ID,exercise_id和week_day_id的练习。希望你明白我的意思。我一直在尝试通过阅读文档找到解决方案,但是我无法自己解决。预先感谢

0 个答案:

没有答案