2017-09-12 27 views
0

私は製品のチェックボックスリストを持っていますが、チェックボックスを使用して他のテーブルのすべてのデータと外部キーからも削除します。テーブルチェックボックスlaravelで複数のデータを削除する外部キーエラー

私はテーブルから、チェックボックスからチェックされたデータを削除するためにルーティングされているフォームを作成しました。

<form action="{{ route('admin.delproducts') }}" method="get" id="delprod"> 
    {{ csrf_field() }} 

    <table class="table table-hover">          
     <thead>       
      <tr> 
       <th width="4%"></th> 
       <th width="17%">SUB-CATEGORY</th> 
       <th width="30%">PRODUCT NAME</th> 
       <th width="10%">QTY</th> 
       <th width="10%">STATUS</th> 
       <th width="25%">UPDATED</th>     
      </tr> 
     </thead> 
     <tbody> 
      @foreach($products as $key => $data) 
      <tr> 
       <td><input type="checkbox" name="products[]" value="{{ $data->product_id }}" />&nbsp;</td>        
       <td><a href="#"> {{ $data->name }} </a></td> 
       <td><a href="#"> {{ $data->product_name }} </a></td> 
       <td><a href="#"> {{ $data->quantity }} </a></td> 
       <td><a href="#"> {{ $data->status }} </a></td> 
       <td>{{ $data->updated_at }}</td>        
      </tr> 
      @endforeach 
     </tbody> 
    </table> 
    </form> 
<p data-placement="top" data-toggle="tooltip" title="Delete"><button class="btn btn-danger btn-sm pull-right delbtn" data-title="Delete" data-toggle="modal" data-target="#delete" ><span class="glyphicon glyphicon-trash"></span></button></p> 

iveはフォームの外にボタンを作成しましたが、私はそのためのjavascriptを作成しました。ここに私のコントローラで

$(".delbtn").click(function() { 
    $('#delprod').submit(); 
}); 

私がやったことです:

public function deleteProducts(Request $request) { 

    Product::destroy($request->products); 

    return redirect()->route('admin.product'); 
} 

この製品表には、私はまた、コントローラは、内のすべてのデータを削除することができますどのようにテーブルProduct_imageから外部キーを持っているので、私はエラーを得ましたProduct_imageproduct_idのチェックボックスがチェックされていますか?

私はモデルProduct_imageを作ってみました、私のコントローラ

Product_image::destroy($request->products); 

でこれをしようとしたが、それはそれは存在しdoes't言うので、それは私にエラーを与えます。チェックボックスで渡されている外部キーを削除するクエリを作成する上での提案はありますか? 。チェックボックスから配列を受け付けるクエリを削除するようなものですか?

答えて

0

Product Image間に関係がある場合は、これを行うことができます。 (私はあなたの関係の名前がproductImageであると仮定します。Laravel 機能を破壊関係を削除しません。あなたが関係を削除したい場合は、あなたの移行ファイルに直接データベースにonDelete定義する必要がありonDelete('cascade')

を定義するdidntの場合。

その後
$table 
    ->foreign('product_id') 
    ->references('id') 
    ->on('product_image') 
    ->onDelete('cascade'); 

あなたは(それが関係を削除するかどうかわからない)を破壊使用して試すことができた場合は、その、あなたはありません。この

public function deleteProducts(Request $request) { 
    foreach ($request->products as $product_id) { 
     $product = Product::find($id); 
     $product->productImage()->delete(); 
    } 

    return redirect()->route('admin.product'); 
} 

を行うことができない場合リレーショナル・データを手動で削除する必要があります。

+0

お返事ありがとうございました。私は私の製品と製品のイメージとの関係がありません。手動で削除することはできますか? –

+0

あなたはそのためのデータベースの手動クエリが必要...私は単に関係を作成すると言うでしょう –

+0

こんにちは私は未定義の変数テーブルを持っています。私はこのようにしました:public function deleteProducts(Request $ request){ foreach($ request-> products as $ product_id){ $ table-> foreign( 'product_id') - >リファレンス( 'product_id') - > on( 'product_images') - > onDelete( 'cascade'); } Product :: destroy($ request-> products); return redirect() - >ルート( 'admin.product'); } –

関連する問題