【问题标题】:How can I get this many-to-many relationship work in Laravel 5.5?如何在 Laravel 5.5 中获得这种多对多关系的工作?
【发布时间】:2018-08-01 16:06:03
【问题描述】:

我在 Laravel 5.5 的 eloquent 中遇到了多对多关系的错误

照亮\数据库\查询异常(42000) SQLSTATE[42000]:语法错误或访问冲突:1066 不是唯一的表/别名:'users'(SQL:选择users.*、users.roles_id 作为pivot_roles_idusers.users_idpivot_users_id, users.idpivot_id, users.createdpivot_created, users.updatedusers, users, @987654337. 987654339@ from users 内部连接 ​​users on users.id = users.users_id where users.roles_id = 2)

我有一个用户表、角色表和一个 user_role 表(数据透视表)。 user_role 表有以下列:id, users_id(fk from users table),roles_id (fk from roles table),created,updated,deleted。

在我的用户模型中

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);
    }
}

查看文档,看起来我正在正确设置关系,但显然我没有,我不知道我做错了什么

【问题讨论】:

    标签: php laravel many-to-many laravel-5.5 laravel-eloquent


    【解决方案1】:

    belongsToMany 方法的第二个参数是关系表名(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是一个关系表名,这就是错误的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-16
      • 2019-02-02
      • 2023-03-31
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      相关资源
      最近更新 更多