我有一个使用Laravel 4的User-Roles模型,其中用户可以使用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()
我尝试使用具有<1的has来查看该函数是否有问题,但是在阅读了此内容和在线源代码之后,该函数调用几乎完成了我尝试过的工作。
我的函数调用出了点问题,还是我弄乱了某个地方的配置?
供参考,这是我的其他Model类:
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');
}
编辑:我发现复制粘贴时,我被填充物弄乱了。它没有解决问题,但我想这还差了一步。
要使用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);
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句