2014-03-18 4 views
5

Ich arbeite in Laravel und ich bin interessiert in der Überprüfung der SQL-Anweisungen von einer Eloquent-Abfrage generiert, die eine With() -Anweisung enthält. Aus irgendeinem Grund bekomme ich nur die Hauptanfrage. Zum Beispiel, wenn ich laufeVerwenden von Laravel toSql auf Abfragen mit 'mit' Klausel

class Child extends EloquentVersioned { 
    public function childRequests() 
    { 
     return $this->hasMany('ChildRequest'); 
    } 

} 
$childQuery = Child::orderBy('last_name')->orderBy('first_name')->with('childRequests'); 
return $childQuery->toSql(); 

ich zurück:

select `children`.* from `children` order by `last_name` asc, `first_name` asc 

Wie komme ich zurück, um die SQL für die mit ('childRequests') Abfrage?

Antwort

5

Eigentlich wenn with dann Laravel mit verwendet eine andere Abfrage für das, damit Sie nicht, dass die Ausgabe der Abfrage bekommen, aber wenn Sie DB::getQueryLog() verwenden dann werden Sie alle Abfrage-Logs erhalten und Ihre Log bekommen können Sie die aktuelle Abfrage ausführen, zum Beispiel:

Child::orderBy('last_name')->orderBy('first_name')->with('childRequests')->get(); 

Nun ist diese versuchen:

dd(DB::getQueryLog()); // an array of all queries 

Sie erhalten eine Ausgabe Ihrer Abfragen und Sie können die letzte Abfrage finden:

$queries = DB::getQueryLog(); 
dd(end($queries)); // only last query 
+0

Ok, das ist praktisch. Wird die "letzte" Abfrage alle vom Child-Aufruf generierten Abfragen enthalten, oder muss ich irgendwie rückwärts durch dd arbeiten? – dspitzle

+0

'$ queries = DB :: getQueryLog()' Hier werden die '$ Queries' alle Queries in einem Array enthalten und die letzte Query wird nur die letzte enthalten und in diesem Fall werden Sie nicht das bekommen was Sie suchen Denn wenn Sie 'mit' hinter der Szene verwenden, führt' Laravel' eine weitere Abfrage für die Relation aus. –

+0

Gibt es eine Dokumentation der Funktion dd(), die ich auschecken kann? Wenn es Parameter für das Ziehen von Ende-1 gibt, könnte ich genug Schritte zurückgehen, um die Abfragen zu holen, von denen ich weiß, dass sie ausgeführt werden sollten. – dspitzle

Verwandte Themen