Heim > Artikel > Backend-Entwicklung > Fragen zu Laravel5.2 nehmen
<code>$room=\App\Model\Room::with(['items'=>function($query){ $query->take(12); }])->get();</code>
Die Elemente unter jedem Raum im obigen Code sind leer. Wenn $query->take(12);
auskommentiert wird, werden die Elemente erneut angezeigt.
<code>$room=\App\Model\Room::with(['items'=>function($query){ $query->take(12); }])->get();</code>
Die Elemente unter jedem Raum im obigen Code sind leer. Wenn $query->take(12);
auskommentiert wird, werden die Elemente erneut angezeigt.
Hmm... Der Grund ist eigentlich ganz einfach. Sie können ein dd()
hinzufügen, um das generierte SQL
anzuzeigen:
<code class="php">$room = \App\Model\Room::with(['items' => function($query){ dd($query->take(12)->toSql()); }])->get();</code>
erzeugt Folgendes SQL
(? Die Zahl gibt an, wie viele Ihrer Room
es gibt):
<code class="sql">select * from `machines` where `machines`.`series_id` in (?, ?, ?) limit 12</code>
Sie können sehen, dass es sich beim Hinzufügen von Einschränkungen wie take
und limit
tatsächlich nicht um eine Einschränkung für 每一筆
, sondern um eine Einschränkung für alle zugehörigen Daten handelt Wenn ein Teil von Room
nicht über Item
verfügt, können Sie diese Zahl auf einen großen Wert festlegen, z. B. 100000
, und Sie werden feststellen, dass items
Daten enthält, da Ihr Limit liegt größer als die Datenmenge.
Zur Einschränkung der zugehörigen Daten jeder Transaktion habe ich einige Informationen gefunden, aber es gibt keinen einfachen Weg, dies zu erreichen. Der zuverlässigste Weg ist derzeit dieser:
Eloquente Beziehungen optimieren – wie erhält man N verwandte Modelle pro Elternteil?
Verstehe nicht, was es bedeutet $room=AppModelRoom::with('items')->take(12);
Offensichtlich gab es keine Übereinstimmung.
Alle mit werden durch die Methode abstract public function addEagerConstraints(array $models)
des Assoziationsmodells implementiert.
Sie werden feststellen, dass der Grund darin liegt, dass die von der Abfrage der zugehörigen Datentabelle in with
bereitgestellten Daten nicht mit den von Ihnen erhaltenen Modelldaten übereinstimmen, was zu keinen Ergebnissen für die Abfrage führt.