Как выбрать модели с соответствующими моделями count 0 в Laravel 4?

77
7

Я разрабатываю PHP-приложение с использованием Laravel 4 framework. У меня установлены пользовательские и ролевые модели. Роль может принадлежать многим пользователям, и пользователь может иметь много ролей. Я хотел бы выбирать пользователей без каких-либо ролей. Как сделать этот запрос с помощью Laravel ORM?

Вот мой Role.php

class Role extends Eloquent {

protected $table = 'roles';

public function users() {
return $this->belongsToMany('User', 'user_roles');
}

}

И в моем User.php у меня есть этот код:

public function roles() {
return $this->belongsToMany('Role', 'user_roles');
}

Я пробовал код ниже, но он не возвращает ни одного пользователя, даже я создал пользователей без ролей.

User::has('roles', '=', 0)->paginate(15);

Ниже приведен код, но пользователи являются объектами stdClass. Мне нужно, чтобы они были объектами User.

$users = DB::table('users')->whereNotIn('id', function($query){
$query->select('user_id')->from('user_roles');
})->paginate(15);

РЕДАКТИРОВАТЬ

Добавлен журнал запросов для пользователя :: has ('role', '=', 0) → paginate (15)

array (3) {["query"] => string (189) "select * from" users "где (выберите count (*) из" role "внутреннего соединения" user_roles "в" role "." id "=" user_roles "." role_id "где" user_roles "." user_id "=" users "." id ") =? limit 15 offset 0" ["bindings"] => array (1) {[0] => int (0) } ["time"] => float (0.11)}

спросил(а) 2021-01-25T15:40:11+03:00 5 месяцев назад
1
Решение
77

Попробуй это:

User::whereNotIn('id', function($query){
$query->select('user_id')->from('user_roles');
})->paginate(15);

ответил(а) 2021-01-25T15:40:11+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема