如何在 Laravel 5.5 中使这种多对多关系起作用?
How can I get this many-to-many relationship work in Laravel 5.5?
我在 eloquent Laravel 5.5
中遇到多对多关系错误
Illuminate \ Database \ QueryException (42000)
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'users' (SQL: select users
.*, users
.roles_id
as pivot_roles_id
, users
.users_id
as pivot_users_id
, users
.id
as pivot_id
, users
.created
as pivot_created
, users
.updated
as pivot_updated
, users
.deleted
as pivot_deleted
from users
inner join users
on users
.id
= users
.users_id
where users
.roles_id
= 2)
我有一个用户 table、角色 table 和一个 user_role table(枢轴 table)。 user_role table 有以下列:id, users_id(fk from users table),roles_id (fk from roles table),创建、更新、删除。
在我的用户模型中
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);
}
}
查看文档,看起来我正在正确设置关系,但显然我没有,我也不知道我做错了什么
belongsToMany
方法的第二个参数是关系 table name(docs),你必须传递 role_user
而不是 users
。
public function roles(){
return $this->belongsToMany(\App\roles::class,'role_user','users_id','roles_id','id','id')->withPivot(['id','created','updated','deleted']);
}
...
public function users(){
return $this->belongsToMany(\App\User::class,'role_user','roles_id','users_id','id','id')->withPivot(['id','created','updated','deleted']);
}
您的代码认为您的第二个参数 users
是一个关系 table 名称,这就是错误的原因。
我在 eloquent Laravel 5.5
中遇到多对多关系错误Illuminate \ Database \ QueryException (42000) SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'users' (SQL: select
users
.*,users
.roles_id
aspivot_roles_id
,users
.users_id
aspivot_users_id
,users
.id
aspivot_id
,users
.created
aspivot_created
,users
.updated
aspivot_updated
,users
.deleted
aspivot_deleted
fromusers
inner joinusers
onusers
.id
=users
.users_id
whereusers
.roles_id
= 2)
我有一个用户 table、角色 table 和一个 user_role table(枢轴 table)。 user_role table 有以下列:id, users_id(fk from users table),roles_id (fk from roles table),创建、更新、删除。
在我的用户模型中
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);
}
}
查看文档,看起来我正在正确设置关系,但显然我没有,我也不知道我做错了什么
belongsToMany
方法的第二个参数是关系 table name(docs),你必须传递 role_user
而不是 users
。
public function roles(){
return $this->belongsToMany(\App\roles::class,'role_user','users_id','roles_id','id','id')->withPivot(['id','created','updated','deleted']);
}
...
public function users(){
return $this->belongsToMany(\App\User::class,'role_user','roles_id','users_id','id','id')->withPivot(['id','created','updated','deleted']);
}
您的代码认为您的第二个参数 users
是一个关系 table 名称,这就是错误的原因。