请尝试在Laravel 5.4中建立多对多的关系,但我总是得到这个错误:
Builder.php第2443行中的BadMethodCallException:调用undefined 方法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 :(得分: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 :(得分:-1)
你弄错了: 如果您有多对多关系,或者您的关系应该是:
public function users()
{
return $this->belongsToMany('App\User', 'foreign_key');
}
您必须定义数据透视表category_user