2016-05-23 3 views
1

"Services"というモデルと "Licenses"というモデルがあります。サービスには多くのライセンスがあり、ライセンスは1つのサービスに属します。Laravelリレーションシップを含むエントリーを読み解くEloquentベストプラクティス

私は彼らのライセンスを含むすべてのサービスを戻したいとき、私は現在、次の操作を行います

$services = Auth::user()->services; 
foreach($services as $service) { 
    $service->licenses; 
} 

これが動作しているが、私は、私はこの非常に頻繁に、時には非常に深いで使用しているため、何かクリーナーを持ってみたいです構造。

+0

試してみてください:$ services = Services :: all(); –

+0

これは私が望むものではありません。私は " - >サービス - >深い"のような何かを探しているすべてのサービスを望んでいないので、すべてのリレーションも同様に返されます –

+1

https://laravel.com/docs/5.1/eloquent-relationships#eager-読み込み中。これがあなたに役立つことを願っています。 –

答えて

1

関連するすべてのレコードをロードしようとしているだけの場合、ネイバーされた関係を受け入れる、熱心なローディングまたは遅延したローディングを使用することができます。あなたの例では

、すでにユーザーがロードされているので、あなたは関連レコード怠惰な熱心な負荷にload()メソッドを使用することができます。

$user = User::with('services.licenses')->find(Auth::user()->id); 
dd($user); 

Auth::user()->load('services.licenses'); 
dd(Auth::user()); 

正規熱心なロードが同じように動作します

+0

ライセンスに別の関係がある場合、これを読み込む方法もありますか? –

+0

@FrankProvostはい、ネストされたリレーションシップがどのくらい深く(利用可能なメモリ以外でも)どれくらい深くてもかまいません。 – patricus

関連する問題