web-dev-qa-db-ja.com

メソッドaddEagerConstraintsは存在しません

UserとEventの2つのモデルがあります。ユーザーとイベントの間にinvitations列を持つピボットテーブルstatusを作成しました。私のイベントモデルの定義では、これを書いた:

public function invited()
{
    return $this->belongsToMany(User::class, 'invitations', 'event_id', 'user_id')
        ->withTimestamps()
        ->withPivot('status')
        ->orderByDesc('invitations.updated_at');
}

public function participants()
{
    $event = $this->with([
        'invited' => function ($query) {
            $query->where('invitations.status', InvitationStatus::ACCEPTED)->get();
        }
    ])->first();

    return $event->invited;
}

しかし、私のコントローラーで私がするとき:

$event = Event::where('id', $id)->with(['owner', 'participants'])->first();

次のエラーがあります。

(1/1) BadMethodCallException
Method addEagerConstraints does not exist.

誰かが理由を知っていますか?

6
Louis Etienne

あなたがこれをやろうとしているとき:

->with('participants')

Laravelは関係インスタンスの取得を期待しています。つまり、このメソッドをリレーションとして使用することはできません。

10
Alexey Mezenin

wherewithの前に置く必要があります。これは雄弁な人が期待することです。

次のようになります。

$event = Event::with(['owner', 'participants'])->where('id', $id)->first();
0
Ahmad