我在Laravel 5.5中以雄辩的方式得到了多对多关系的错误
Illuminate \ Database \ QueryException(42000)SQLSTATE [42000]:语法错误或访问冲突:1066不唯一的表/别名:'users'(SQL:select users . *,users.roles_id as pivot_roles_id,users.users_id as pivot_users_id, users.id为pivot_id,users.created为pivot_created,users.updated为pivot_updated,users.deleted为pivot_deleted,来自users.id = users.users_id,其中users.roles_id = 2)
我有一个用户表,角色表和一个user_role表(数据透视表) . user_role表具有以下列:id,users_id(来自users表的fk),roles_id(来自角色表的fk),创建,更新,删除 .
在用户模型中我有
public function roles(){
return $this->belongsToMany(\App\roles::class,'roles','users_id','roles_id','id','id')->withPivot(['id','created','updated','deleted']);
}
在我的角色模型中
public function users(){
return $this->belongsToMany(\App\User::class,'users','roles_id','users_id','id','id')->withPivot(['id','created','updated','deleted']);
}
在我的控制器中我有
$roles = $this->rolesObject->whereNull('deleted')->orderBy('role')->get();
//Just for testing how to view the relationship won't be real code in the end
foreach($roles as $role){
foreach($role->users as $user){
dump($user->display_name);
}
}
浏览文档看起来我正在 Build 正确的关系,但显然我不是,我不知道我做错了什么
1 回答
belongsToMany
方法的第二个参数是关系表名称(docs),您必须传递role_user
而不是users
.您的代码认为您的第二个参数
users
是关系表名称,这就是错误的原因 .