获取非链接模型列表,在 many_to_many 关系中,使用 Laravel Eloquent
Obtaining a list of non-linked models, in many_to_many relations, using Laravel Eloquent
我有一个用户角色模型,使用 Laravel 4,其中一个用户可以有多个角色,使用 Eloquent。我可以使用此代码轻松访问链接到用户的所有角色:
class User extends Model {
protected $table = 'user';
protected $fillable = array('name');
public function rolesLinked() {
return $this->hasMany('App\UserRoleLink', 'user_id');
}
}
我一直在尝试获取未链接到用户的角色,以显示在特定用户页面上的 select 框中。使用此函数,包含在 User class 中。
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 < 1 来查看函数是否有问题,但是 after reading this 和在线源代码,函数调用几乎完成了我试过的操作。
是我的函数调用出了问题,还是我在某处搞砸了配置?
作为参考,这是我的另一个模型 classes:
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');
}
编辑:我发现我在复制粘贴时被 fillables 搞砸了。它没有解决问题,但我想这更近了一步。
要使用 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);
});
}
我有一个用户角色模型,使用 Laravel 4,其中一个用户可以有多个角色,使用 Eloquent。我可以使用此代码轻松访问链接到用户的所有角色:
class User extends Model {
protected $table = 'user';
protected $fillable = array('name');
public function rolesLinked() {
return $this->hasMany('App\UserRoleLink', 'user_id');
}
}
我一直在尝试获取未链接到用户的角色,以显示在特定用户页面上的 select 框中。使用此函数,包含在 User class 中。
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 < 1 来查看函数是否有问题,但是 after reading this 和在线源代码,函数调用几乎完成了我试过的操作。
是我的函数调用出了问题,还是我在某处搞砸了配置?
作为参考,这是我的另一个模型 classes:
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');
}
编辑:我发现我在复制粘贴时被 fillables 搞砸了。它没有解决问题,但我想这更近了一步。
要使用 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);
});
}