我正在开发一个有用户、角色和权限的Laravel 8应用程序.
我try 获取当前用户的list of permissions.
在app\Models\Permission.php
年中,我有:
class Permission extends Model {
use HasFactory;
protected $fillable = [
'name', 'list'
];
}
在app\Models\Role.php
年中,我有:
class Role extends Model {
use HasFactory;
protected $fillable = [
'name', 'permission_id'
];
}
在控制器中,我首先得到用户的role id:
$user_role = User::where('email', $user->getMail())->first()->role_id;
然后是权限列表:
$user_permissions = Permission::select (
"roles.name as role_name",
"permissions.list as permissions_list",
)
->leftJoin("permissions", "roles.permission_id", "=", "permissions.id")
->where('roles.id', $user_role)
->get();
上述内容旨在等效于此MySQL查询,其效果如下:
SELECT roles.name as role_name, permissions.list AS permissions_list
FROM roles LEFT
JOIN permissions ON roles.permission_id = permissions.id WHERE roles.id = 1
问题
您可以看到上面的Laravel查询生成器失败,并显示以下消息:
Syntax error or access violation: 1066 Not unique table/alias: 'permissions' (SQL: select `roles`.`name`, `permissions`.`list` from `permissions` left join `permissions` on `roles`.`permission_id` = `permissions`.`id` where `roles`.`id` = 1)
我不明白为什么,因为我已经在phpMyAdmin和it个works中测试了MySQL查询.