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.
誰かが理由を知っていますか?
あなたがこれをやろうとしているとき:
->with('participants')
Laravelは関係インスタンスの取得を期待しています。つまり、このメソッドをリレーションとして使用することはできません。
where
はwith
の前に置く必要があります。これは雄弁な人が期待することです。
次のようになります。
$event = Event::with(['owner', 'participants'])->where('id', $id)->first();