私は3つのテーブルを持っています:Client
、User
、Position
。クライアントからユーザーへは多対多、クライアントからポジションへは1対多、ユーザーからポジションへは多対多です。
これで、aUser
は2つの異なるの一部になることができるClients
ため、それぞれについて、このユーザーはいくつかの位置に割り当てられます。クライアントとそのすべてのユーザー、およびその位置を取得したいと思います。
私が使用するとき:
Client::whereId($id)
->with(array(
'users',
'users.positions'
))
->firstOrFail()
次に、クライアントのすべてのユーザーを取得しますが、ユーザーが属するすべてのクライアントから、ユーザーが持つすべての位置を取得します。
私に何ができる?
例
->ソニーとマイクロソフトの2人のクライアントと、ジョンとマイクの2人のユーザーがいるとします。
->マイクロソフトには開発者とエンジニアのポジションがあるとしましょう。
->ソニーにはマーケティングと財務のポジションがあるとしましょう。
ジョンはマイクロソフトで開発者として働いており、マイクはマイクロソフトでエンジニアとして、ソニーで財務担当者として働いています。
マイクロソフトのすべての従業員とその役職を取得したい場合は、ジョン(および彼の役職は開発者)とマイク(および彼の役職は財務)を取得することを期待しています。
ただし、上記のコードを実行すると、John(Developerを使用)とMike(Engineer and Financeを使用。Financeのピボットテーブルには、Sony用であることが明確に示されています)が表示されます。
私は自分の答えを見つけました。熱心な読み込みに制約を適用する必要がありました。
<?php
Client::with(array(
'users',
'users.positions' => function($query) {
$query->whereClientId($id);
}
))
->find($id);
これは完璧に機能しました!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加