Der Zweck des eifrigen Ladens ist es, die Anzahl der DB-Abfragen zu reduzieren, wenn ich mich nicht irre. Aber wenn ich die folgenden meine Query Builder-Instanz hinzufügen, erzeugt es eine zusätzliche SQL-Abfrage für jeden Datensatz zurückgegeben:Eager loading funktioniert nicht
->with([
'firstEarmark' => function($q) {
$q
->select('earmarks.*')
->join('locations', 'locations.id', '=', 'earmarks.location')
->select('earmarks.*', 'locations.location AS earmarked_location')
->where('date', '>=', date('m/d/Y'))->orderBy('date', 'asc')
->get();
}
Es tut dies mit oder ohne Erklärung beizutreten.
So fehlt mir der Punkt des eifrigen Ladens, oder mache ich es falsch?
Mein zweites (wenig verwandtes) Problem ist, dass, wenn ich die kommentierte -> select() -Anweisung einschließe, diese Unterabfrage aus irgendeinem Grund keine Ergebnisse erzeugt.
In der Tat generiert Laravel die gleiche SQL-Abfrage für jeden Datensatz. Wenn es zwei Laptop Ergebnisse sind, erhalte ich zwei identische Abfragen der ersten Earmark Datensatz für jeden ziehen:
113 Prepare select `earmarks`.*, `locations`.`location` as `earmarked_location` from `earmarks` inner join `locations` on `locations`.`id` = `earmarks`.`location` where `earmarks`.`laptop_id` in (?, ?) and `date` >= ? order by `date` asc
113 Execute select `earmarks`.*, `locations`.`location` as `earmarked_location` from `earmarks` inner join `locations` on `locations`.`id` = `earmarks`.`location` where `earmarks`.`laptop_id` in (1, 2) and `date` >= '11/04/2016' order by `date` asc
113 Close stmt
113 Prepare select `earmarks`.*, `locations`.`location` as `earmarked_location` from `earmarks` inner join `locations` on `locations`.`id` = `earmarks`.`location` where `earmarks`.`laptop_id` in (?, ?) and `date` >= ? order by `date` asc
113 Execute select `earmarks`.*, `locations`.`location` as `earmarked_location` from `earmarks` inner join `locations` on `locations`.`id` = `earmarks`.`location` where `earmarks`.`laptop_id` in (1, 2) and `date` >= '11/04/2016' order by `date` asc
Diese Abfragen sind identisch!