2017-05-26 137 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()

我覺得我的代碼是好的,我不能修復它,任何請幫助。

謝謝你。

這是我的代碼:

用戶模式

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

} 

分類模型

class Category extends Model 
{ 

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

} 

調用方法

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

這個錯誤是說你叫'類別()'上查詢構建器,而不是模型。你確信你有''用戶'從您的代碼中的'first()'調用分配? – Devon

回答

1

當使用多對多關係來附加或分離模型時,您應該使用attach(),detach()sync()方法。

如果idcategs是ID數組,這樣做:

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

如果它準備的數據數組,你需要先創建類別:

$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是一對多。 – Devon