2016-06-12 8 views
4

Also erstelle ich eine API für eine Webanwendung, die ich erstelle, und ich versuche, sie innerhalb des Eloquent ORM zu halten. Es gibt eine Eltern-Kind-Beziehung, die ich los:Laravel Eloquent ORM - Verschachtelt mit Anweisungen

Benutzer -> Site-Logs -> Seiten

Site-Klassencode:

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

sitelog Klassencode:

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'); 
    } 
} 

Wenn ich die SiteLog-Klasse instanziiere, verwende:

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

Wenn ich die GET-Anfrage mit jQuery mache, bekomme ich alle Seiten und innerhalb von ihnen habe ich ein Array von Objekten mit allen Daten für die jeweiligen Protokolle der Standorte. Was genau ich wollte. Ich wollte jedoch noch einen Schritt weiter gehen und den Benutzer erreichen, dem das Protokoll zugeordnet ist.

Art wie wie dies funktionieren würde:

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

Aber alles in einer Aussage, als ob es eine große Abfrage beitreten war. Ich bin mir jedoch nicht sicher, ob das Eloquent ORM einen solchen Testfall abdeckt.

Hat jemand jemals so etwas erreicht? Ich kann das mit einigen ziemlich hacky Praktiken erledigen oder einfach eine rohe SQL-Abfrage schreiben, aber ich frage mich nur, ob es eine beredtere Art und Weise gab, dies zu tun.

Antwort