Я обнаружил, что это таблица, относящаяся к отделам и подразделениям.
Таким образом, вы можете построить отношения многие-ко-многим между ними,
Создать отношения в ваших моделях
в модели блока:
public function departments()
{
return $this->belongsToMany('App\Unit','unit_department','unit_id','department_id');
}
в модели отдела:
public function units()
{
return $this->belongsToMany('App\Department','unit_department','department_id','unit_id');
}
Присоедините новые отношения, просто используйте:
Unit::find($request->unit_id)->departments()
->sync($request->department_id);
К сожалению, вы не можете использовать softDelete для sync()
.
И я не думаю, что вам нужно мягко удалять с unit_departments
. Как pivot
, тогда оно не должно иметь значения, если оно удалено или нет.
И если пользователь обновляет отношения на частом, эта таблица будет быстро расти.
Если вам действительно нужно soft-delete, вы можете написать это так:
$department_ids = $request->department_id;
$unit_id = $request->unit_id
// soft delete the unit_departments not in request:
UnitDepartment::where('unit_id', $unit_id)->whereNotIn('department_id', $department_ids)->delete();
// insert the new department_id+unit_id relationship
$exist_department_ids = UnitDepartment::where('unit_id', $unit_id)->whereIn('department_id', $department_ids)->pluck('department_ids')->all();
$dept_ids = array_diff($exist_department_ids, $department_ids);
$depts = collect($dept_ids)->map(function($dept_id) use ($unit_id) {
return ['department_id' => $dept_id, 'unit_id' => $unit_id];
});
UnitDepartment::insert($depts);