2016-08-30 4 views
0

商品の関係をすべて削除する必要があります。関係を持つアイテムを削除しようとするとエラーが表示されます。ここに私のコードは次のとおりです。ここでLaravelのすべての関係を削除するためのベストプラクティスは何ですか?

public function getDelete(Product $product) 
{ 
    $name = $product->name; 

    $product->Field()->Data()->delete(); 
    $product->Field()->delete(); 
    $product->delete(); 

    return redirect('products')->with('success', 'Product <b>'.$name.'</b> successfully deleted.'); 
} 

はモデルです:Builder.phpライン2101で

public function Field() 
{ 
    return $this->hasMany("\App\ProductField", 'product_id','id'); 
} 

public function Data() 
{ 
    return $this->hasMany("\App\ProductFieldData", 'product_field_id','id'); 
} 

BadMethodCallException:未定義 方法を照らし\データベース\クエリー\ビルダーに呼び出し::データ()

このエラーは、製品にProductFieldDataがない場合に発生します。しかし、関係データがないとスキップしなければならないと思いますか?

どのように製品を削除するすべての関係ですか?

答えて

0

はこれを試してみてください:

foreach ($product->Field()->Data as $data) { 
    $data->delete(); 
} 

あなたがコレクションを扱っているし、あなたがそれを反復する必要があるので、あなたは、項目のコレクションに削除機能を実行することはできません。

ところで、あなたはON DELETE CASCADEを使ってこれを行うべきですか?あなたはそれについていくつかの調査をする必要があります、それはあなたに多くの時間を節約します!

+0

同じエラー;)外部キーを追加して削除カスケードを追加しましたが、Laravelによって最初に削除する必要があります – Haroldas

+0

@Haroldasは編集を行いました。そのplzを試してください – Markinson

+0

@Haroldasは動作しましたか?それができたら答えとして受け入れるとうれしいでしょう:) – Markinson

関連する問題