web-dev-qa-db-ja.com

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

私は単純なユーザー管理システムを作成しようとしましたが、リレーションの照会に関しては、障害物にぶつかり続けています。たとえば、sersrolesがあり、すべてのユーザーとそのロールに対してクエリを実行しようとすると、エラーが発生します。タイトルの1つは、私が遭遇した最新のものです。

ユーザーとロールモデルは次のようになります。

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

2つの間の多対多の関係の移行テーブルは次のようになります。

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

それで、私はここで何が欠けているのかを教えてくれる別の目が必要ですか?

41
Tomkarho

リレーションを定義するメソッドにreturnステートメントがありません。関係定義を返す必要があります。

交換

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');
}
129
jedrzej.kurylo