1. ホーム
  2. php

Laravel 5 リレーションでクエリを実行すると、「メンバ関数 addEagerConstraints() on null の呼び出し」エラーが発生する。

2023-10-03 07:51:11

質問

シンプルなユーザー管理システムを作ろうとしているのですが、リレーションのクエリに関してブロックにぶつかり続けています。 例えば、私は ユーザー ロール で、すべてのユーザーとそのロールのクエリを作ろうとすると、いつもエラーが発生します。 タイトルのものは、私が遭遇した最新のものだけです。

私のユーザーとロールモデルは次のようなものです。

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;
}

では、私がここで見逃しているものは何なのか、教えてくれる別の目が必要なのでしょうか?

どのように解決するのですか?

不足しているもの 戻る 文がありません。リレーション定義を返す必要がある。

置き換える

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');
}