从多对多数据透视表中删除单个数据

xnifntxz  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(374)

我正在尝试删除透视表中的单个项,但我不知道如何使其正常工作?有可能吗?如果我的方法错了,请纠正我。我将在下面展示我自己的方法。
这将获取属于术语id的附加级别列表,当您单击“编辑”按钮时,将转到第二页。。

现在显示属于术语\u id的级别,如果要删除该级别,可以选中复选框。

下面是我的问题:
如果选中特定复选框,如何删除所选级别。
在我的行动中,我应该走什么路线 <form action="#" method="POST" > 以便将其指向delete函数。
我需要在路由器中创建route::post吗?执行删除操作
这是我的控制器:

public function edit_term($id){

$terms = Term::with('level')->where('id','=',$id)->get();
return view('term_level.edit',compact('terms'));}

 public function detach_term($id)
{//this is for deleting the data}

这是我的路线:

Route::get('term/get/{id}/edit', 'ListController@edit_term');

Route::post('term/get/{id}/edit', 'ListController@detach_term');

刀片:

<form action="term/get/{id}/deleteLevel/{levelId}" method="POST" >{{ csrf_field() }}
@foreach($terms as $term)
@foreach($term->level as $levels>
   <input type="checkbox" name="level_id[]" value="{{ $levels->id }}">
        {{ $levels->levelname }}
@endforeach
@endforeach
eqzww0vc

eqzww0vc1#

你需要 term id和 level 术语中的id
路线

Route::post('term/{id}/deleteLevel', 'ListController@detach_term');

控制器动作

public function detach_term(Request $request, $id)
{
   $term = Term::with('level')->find($id);

   if($term){
      $postData = $request->all();
      $term->level()->detach($postData['level_id']);
      return redirect('term/get/' . $term->id);
   }else{
      abort(400, 'Invalid term');
   }

}

html表单(term/get/2/edit)(请确保 $term 从控制器发送到视图)

<form action="/term/{{$term->id}}/deleteLevel" method="POST" >
    {{ csrf_field() }}
    @foreach($term->level as $levels>
       <input type="checkbox" name="level_id[]" value="{{ $levels->id }}">
            {{ $levels->levelname }}
    @endforeach
    <button type="submit">Delete</button>
</form>

检查连接/分离https://laravel.com/docs/5.6/eloquent-relationships#many-对很多人来说

相关问题