代码之家  ›  专栏  ›  技术社区  ›  Razvan Zamfir

是什么导致我的Laravel 8应用程序出现此查询生成器错误?

  •  2
  • Razvan Zamfir  · 技术社区  · 3 年前

    我正在做一件事 拉维尔8号 具有用户、角色和权限的应用程序。

    我尝试获取当前用户的 权限列表 .

    在里面 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'
      ];
    }
    

    在控制器中,我首先获取用户的 角色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
    

    问题

    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和 信息技术 作品

    我的错在哪里?

    1 回复  |  直到 3 年前
        1
  •  -1
  •   fungusanthrax    3 年前

    ->leftJoin("permissions", "roles.permission_id", "=", "permissions.id")

    应该是 ->leftJoin("roles", "roles.permission_id", "=", "permissions.id")