Получение списка несвязанных моделей в отношениях many_to_many с использованием Laravel Eloquent

У меня есть модель User-Roles, использующая 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()

Я пытался использовать имеет с < 1, чтобы увидеть, если функция была проблематичной, но после прочтения и онлайн исходный код, вызов функции в значительной степени делает то, что я пробовал.

Что-то не так в моем вызове функции, или я где-то испортил конфигурации?

Для справки, вот мои другие классы 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');
}

РЕДАКТИРОВАТЬ: я узнал, что я испортил заполненные файлы, когда я скопировал. Это не решило проблему, но я думаю, что это на один шаг ближе.

0

Решение

Использовать 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);
});
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]