2017-05-26 19 views
1

私はLaravel 5.4の多くの関係に多くをしようが、私はオールウェイズこのエラーを取得してください:BadMethodCallException belongsToMany Laravel 5.4

BadMethodCallException in Builder.php line 2443: Call to undefined method Illuminate\Database\Query\Builder::categories()

任意の、私は私のコードは大丈夫だと思う、と私はそれを修正することはできません助けてください。

ありがとうございます。

これは私のコードです:

Userモデル

class User extends Model 
{ 
    public function categories() 
    { 
     return $this->belongsToMany('App\Category', 'user_categorys'); 
    } 

} 

Categoryモデル

class Category extends Model 
{ 

    public function users() 
    { 
     return $this->belongsToMany('App\User', 'user_categorys'); 
    } 

} 

Callメソッド

$user = User::where('id',$id_user)->first(); 
      foreach ($request->input("idcategs") as $value) { 
       $user->categories()->save($value); 
      } 
+0

を定義する必要があります。あなたのコードの 'first()'呼び出しから割り当てられた '$ users 'があると確信していますか? – Devon

答えて

1

モデルをアタッチまたはデタッチするために多対多の関係を使用する場合は、attach()detach()、およびsync()のメソッドを使用する必要があります。それが作成されたデータの配列の場合は、最初にカテゴリを作成する必要があります

$user = User::find($id_user); 
$user->attach($request->idcategs); 

idcategsの場合は、のような何かを、IDの配列です

$categoriesIds = []; 
$user = User::find($id_user); 
foreach ($request->idcategs as $value) { 
    $categoriesIds[] = Category::create($value)->id; 
} 
$user->attach($categoriesIds); 

https://laravel.com/docs/5.4/eloquent-relationships#updating-many-to-many-relationships

-1

あなたが間違っている: 多対多の関係がある場合、またはあなたの関係は次のようになります。

public function users() 
    { 
     return $this->belongsToMany('App\User', 'foreign_key'); 
    } 

、あなたはこのエラーは、クエリビルダではなく、モデルの `のカテゴリーを()`呼んでいると言っているピボットテーブルcategory_user

+1

hasManyは1対多です。 – Devon

関連する問題