由于多对多关系,我在更新桥接表时遇到问题,如果我选择一门新类(class),它会毫无问题地添加它,但如果我未选中任何类(class),它不会删除它,我该如何继续?
这是表格
<div class="container">
<div class="row">
<div class="col-lg-12">
<form class="form-group" action="{{route('trainers.update', $trainer->id)}}" method="post" enctype="multipart/form-data">
@csrf
@method('PUT')
<div class="form-group">
<label for="name">Nome</label>
<input type="text" class="form-control" name="name" value="{{$trainer->name}}">
</div>
<div class="form-group">
<label for="surname">Cognome</label>
<input type="text" class="form-control" name="surname" value="{{$trainer->surname}}">
</div>
<div class="form-group">
<label for="description">Descrizione</label>
<textarea class="form-control" name="description" rows="8" cols="80">{!! $trainer->description !!}</textarea>
</div>
@foreach ($courses as $course)
<div class="form-check form-check-inline mb-2">
<input name="course_id[]" class="form-check-input" type="checkbox" value="{{$course->id}}">
<label class="form-check-label" for="course_id">{{$course->name_course}}</label>
</div>
@endforeach
<div class="form-group">
<img src="{{asset('storage/'.$trainer->image)}}" alt="">
</div>
<div class="custom-file">
<input type="file" class="custom-file-input" name="image">
<label class="custom-file-label" for="image">Scegli un'immagine</label>
<div class="invalid-feedback"><strong>N.B.</strong> dimensione consigliata 160px x 160px</div>
</div>
<div class="form-group">
<input type="submit" class="form-control" value="MODIFICA ISTRUTTORE">
</div>
</form>
</div>
</div>
</div>
这是 Controller 中的编辑功能
public function edit($id)
{
$trainer = Trainer::find($id);
$courses = Course::all();
return view('trainers.edit', compact('trainer','courses'));
}
这是 Controller 中的更新函数
public function update(Request $request, Trainer $trainer)
{
$data = $request->all();
$trainer->update($data);
$trainer->courses()->detach($data['course_id']);
$trainer->courses()->attach($data['course_id']);
return redirect()->route('trainers.admin');
}
最佳答案
试试这个
public function edit($id)
{
$trainer = Trainer::find($id);
$courses = Course::where('active', 1)->get(); //assume active is there in courses table (or any other column)
// $trainer->courses - retrive trainer courses
return view('trainers.edit', compact('trainer','courses'));
}
public function update(Request $request, Trainer $trainer)
{
$data = $request->all();
$trainer->update($data);
$trainer->courses()->sync($data['course_id']);
return redirect()->route('trainers.admin');
}
sync
方法接受要放置在中间表上的 ID 数组。
欲了解更多信息,请阅读:Syncing Associations
您还可以引用通过中间表列过滤关系
来自上面的链接
关于php - 在 Laravel 中编辑具有多对多关系的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55865255/