2017-12-04 11 views
0

私の製品ごとにいくつかのオプションといくつかの仕様を取得しようとしています。Laravel Sync定義されていないメソッドを呼び出す Database Query Builder

$options = Option::all(); 
$suboptions = Suboption::all(); 
$specifications = Specification::all(); 
$subspecifications = Subspecification::all(); 
return view('admin.products.create', compact('options', 'suboptions', 'specifications', 'subspecifications')); 
:私はこれは私の作成方法であり、それは、製品のIDと options + subspecifications

のIDを取得しproduct_suboptionsproduct_subspecificationsという名前第三のテーブルを作成しなければならなかった代わりに、1の複数の値を取得するために

これは私の店の方法であって、私のモデルで

public function store(Request $request) 
    { 
//......... 

$product->save(); 
$product->suboptions()->sync($request->suboptions, false); 
$product->subspecifications()->sync($request->subspecifications, false); 

return ......// 
} 

この関係:

Product

public function option(){ 
    return $this->belongsToMany(Option::class); 
    } 
    public function suboption(){ 
    return $this->belongsToMany(Suboption::class); 
    } 
    public function specification(){ 
    return $this->belongsToMany(Specification::class); 
    } 
    public function subspecification(){ 
    return $this->belongsToMany(Subspecification::class); 
    } 

Option

public function products(){ 
    return $this->belongsToMany(Product::class); 
    } 

Suboption

public function products(){ 
    return $this->belongsToMany(Product::class); 
    } 

Specification

public function products(){ 
    return $this->belongsToMany(Product::class); 
    } 

Subspecification

public function products(){ 
    return $this->belongsToMany(Product::class); 
    } 

さて問題は、私は、製品を保存するとき、それは未定義のメソッドを照らし\データベースにこのエラー

BadMethodCallException コール\クエリー\ビルダー::サブオプション()

を返すです

私の製品のみを保存しますが、product_suboptionsproduct_subspecificationsテーブルには何も保存しません。

+2

あなたは 'サブオプション'を 'product.php'に持っていますが、あなたは'サブオプション 'を呼び出しています。 'サブオプション 'を'サブオプション'に変更してもう一度やり直してください – usrNotFound

+0

@usrNotFoundは同じ結果です。 – mafortis

答えて

0

を解決して動作するはず

$product->suboption()->sync($request->suboptions, false); 
$product->subspecification()->sync($request->subspecifications, false); 

$product->suboptions()->sync($request->suboptions, false); 
$product->subspecifications()->sync($request->subspecifications, false); 

これに

変更suboptions()及びこれらの行でsubspecifications()

問題は私のフォームにありました。私はname="suboption_id[]"のような名前を取得しようとしていましたが、それはname="suboptions[]"のようになりました。

0

あなたはあなたのコードのタイプミスがあります。そして、それは

+0

は役に立ちません。PS:私の '製品'モデルを 'public function suboptions()'と 'public function subspecifications(){' – mafortis

関連する問題