2016-06-12 11 views
4

私は作成しているWebアプリケーション用のAPIを作成していますし、Eloquent ORM内に保持しようとしています。私が起こっている親子関係があります:Laravel Eloquent ORM - ステートメントでネストされました

ユーザー - >サイトログ] - > [サイト

サイトクラスコード:

class Site extends Model { 
    public function log() { 
     return $this->hasMany('App\SiteLog', 'site_id', 'id'); 
    } 
} 

sitelogがクラスコード:

class SiteLog extends Model 
{  
    public function site() 
    { 
     return $this->belongsTo('App\Site', 'site_id', 'id'); 
    } 

    public function user() 
    { 
     return $this->belongsTo('App\User', 'user_id', 'id'); 
    } 
} 

SiteLogクラスを次のようにインスタンス化すると、

$sites = Site::with('log')->get(); 

jQueryでGETリクエストを作成すると、すべてのサイトが取得され、それらの内部には、それぞれのログのすべてのデータを含むオブジェクトの配列があります。それはまさに私が欲しかったものです。しかし、私はそれをさらに進めて、ログが関連付けられていることをユーザーに伝えたいと思っていました。これがどのように動作するかのようなの

並べ替え:

SiteLog::with('user')->get(); 

しかし、一つの文のすべてのそれは一つの大きながクエリに参加したかのように。しかし、Eloquent ORMがそのようなテストケースをカバーするかどうかはわかりません。

誰もこれを達成したことがありますか?私は、これをかなり面倒なプラクティスや、生のSQLクエリを書くだけで済ませることができますが、これを行うためのより雄弁な方法があるかどうかは疑問です。

答えて

6

雄弁はあなたが簡単にそれを行うことができます:)

https://laravel.com/docs/5.2/eloquent-relationships#eager-loading:あなたが構造を持つようなものを終わるでしょう

Site::with('log.user')->get(); 

Laravel 5.2 Docs - Eloquent - Relationships - Eager Loading - Nested Eager Loading

あなたもあなただけのネストされたチェーンから最後のオブジェクト `User`を取得するにはどのようにこの

$sites = Site::with('log.user')->get();

1

ような何か:

Site 
    log: [ 
     SiteLog 
      User 
     SiteLog 
      User 
     ... 
    ] 
+0

のような熱心な負荷にそれを持っているログごとに関連するユーザーが必要な場合は? – Darama

関連する問題