Heim  >  Artikel  >  Backend-Entwicklung  >  Fragen zu Laravel5.2 nehmen

Fragen zu Laravel5.2 nehmen

WBOY
WBOYOriginal
2016-08-04 09:20:061547Durchsuche

<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.

Antwortinhalt:

<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.

Stellungnahme:
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