Heim > Backend-Entwicklung > PHP-Tutorial > Fragen zu Laravel5.2 nehmen

Fragen zu Laravel5.2 nehmen

WBOY
Freigeben: 2016-08-04 09:20:06
Original
1572 Leute haben es durchsucht

<code>$room=\App\Model\Room::with(['items'=>function($query){
                $query->take(12);  
            }])->get();</code>
Nach dem Login kopieren
Nach dem Login kopieren

Die Elemente unter jedem Raum im obigen Code sind leer. Wenn $query->take(12); auskommentiert wird, werden die Elemente erneut angezeigt.

Antwortinhalt:

<code>$room=\App\Model\Room::with(['items'=>function($query){
                $query->take(12);  
            }])->get();</code>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage