Laravel 5 Запрос с отношениями вызывает "Вызов функции-члена addEagerConstraints() при ошибке" null "

Я пытаюсь создать простую систему управления пользователями, но продолжаю бить дорожные блоки, когда дело доходит до запросов к отношениям. Например, у меня есть пользователи и роли, и всякий раз, когда я пытаюсь сделать запрос для всех пользователей и их ролей, я получаю сообщение об ошибке. Один в названии - только последний, с которым я столкнулся.

Мои модели пользователей и ролей выглядят так:

class Role extends Model
{
    public function users()
    {
        $this->belongsToMany('\App\User', 'fk_role_user', 'role_id', 'user_id');
    }
}

class User extends Model
{
    public function roles()
    {
        $this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');
    }
}

Моя таблица миграции для отношений "многие ко многим" между двумя выглядит так:

public function up()
    {
        Schema::create('role_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned()->nullable(); //fk => users
            $table->integer('role_id')->unsigned()->nullable(); //fk => roles

            $table->foreign('fk_user_role')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('fk_role_user')->references('id')->on('roles')->onDelete('cascade');
        });
    }

И затем я пытаюсь получить все записи с их отношением в контроллере:

public function index()
{
    $users = User::with('roles')->get();

    return $users;
}

Так что мне нужна еще одна пара глаз, чтобы рассказать мне, что мне здесь не хватает?

Ответ 1

Вам не хватает операторов возврата в методах, определяющих отношения. Им нужно вернуть определение отношения.

замещать

public function roles()
{
    $this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');
}

С

public function roles()
{
    return $this->belongsToMany('\App\Role', 'role_user', 'user_id', 'role_id');
}