【问题标题】:Obtaining a list of non-linked models, in many_to_many relations, using Laravel Eloquent使用 Laravel Eloquent 在多对多关系中获取非链接模型列表
【发布时间】:2016-09-01 18:15:47
【问题描述】:

我有一个用户角色模型,使用 Laravel 4,其中一个用户可以拥有多个角色,使用 Eloquent。我可以使用此代码轻松访问链接到用户的所有角色:

class User extends Model {
    protected $table = 'user';
    protected $fillable = array('name');

    public function rolesLinked() {
        return $this->hasMany('App\UserRoleLink', 'user_id');
    }
}

我一直在尝试获取未链接到用户的角色,以显示在特定用户页面的选择框中。使用这个函数,包含在 User 类中。

public function rolesNotLinked() {
    $user = this
    $roles = Roles::whereDoesntHave('App\UserRoleLink',function($query) use ($user){
        $query->where('user_id',$user->id);
    });
}

问题是,调用这个函数会给我以下错误。

Call to undefined method Illuminate\Database\Query\Builder::App\UserRoleLink()

我尝试使用 has with after reading this 和在线源代码,函数调用几乎可以满足我的尝试。

我的函数调用有问题,还是我在某处搞砸了配置?

作为参考,这里是我的其他模型类:

class UserRoleLink extends Model{
     protected $table = 'user_role_link';
     protected $fillable = array('role_id','user_id);

    public function role() {
        return $this->hasOne('App\Role', 'role_id');
    }
}

class Role extends Model{
     protected $table = 'role';
     protected $fillable = array('name');
}

编辑:我发现我在复制粘贴时被填充物搞砸了。它没有解决问题,但我想这更近了一步。

【问题讨论】:

    标签: php laravel eloquent laravel-query-builder


    【解决方案1】:

    要使用whereDoesntHave 方法,您必须在角色模型中添加关系。

    class Role extends Model{
         protected $table = 'role';
         protected $fillable = array('name');
    
         public function UserRoles() {
             return $this->hasMany('App\UserRoleLink', 'id');
         }
    }
    


    另外,whereDoesntHave 方法的第一个参数不是模型而是关系的函数:

    public function rolesNotLinked() {
        $user = this
        $roles = Roles::whereDoesntHave('UserRoles',function($query) use ($user){
            $query->where('user_id',$user->id);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-23
      • 2015-04-05
      • 2021-08-27
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2019-06-13
      • 2019-12-22
      • 2020-03-27
      相关资源
      最近更新 更多