Laravel - eloquent hat, mit, wobei er

Laravel - eloquent hat, mit, wobei er

Problem

hat, mit Und wo hat kann für Anfängerentwickler manchmal verwirrend sein. Geben wir eine Perspektive auf das, was jeder von diesen bedeuten

Lösung

mit() wird im Allgemeinen mit eifriger Belastung verwendet, was eine schnelle Möglichkeit ist, verwandte Modelle zu ziehen. Grundsätzlich bedeutet dies, dass Laravel zusammen mit dem Hauptmodell die aufgelisteten Beziehung (en) vorlädt. Dies ist von Vorteil, wenn Sie zusätzliche Daten laden und vermeiden möchten N+1 DB schlechte Praktiken. Mit eifriger Belastung führen Sie nur eine zusätzliche DB -Abfrage anstelle von möglicherweise Hunderten zusätzlicher Abfragen aus.

Beispiel:

Benutzer> Hasmany> Organisation
$ user = user :: mit ('organisationen')-> get ();
foreach ($ user as $ user)
$ user-> organisationen; // Beiträge sind bereits geladen und es wird keine zusätzliche DB -Abfrage ausgeführt

Hat

hat() wird verwendet, um das Auswahlmodell basierend auf der ausgewählten Beziehung zu filtern. Es ist im Grunde eine Where -Methode für Beziehungen. Wenn Sie nur verwenden hat ('organisation'), Unter Verwendung des gleichen Beispiels für Benutzer und Organisationen würde dies bedeuten, dass alle Benutzer, die mindestens eine Organisation in ihrem "Portfolio" haben, übernimmt.

Beispiel:

Benutzer> Hasmany> Organisation
$ user = user :: hat ('organisationen')-> get ();
// Nur Benutzer, die mindestens eine Organisation in ihrem Portfolio haben, sind
in der Sammlung enthalten

Wo hat

wo hat() ist fast dasselbe wie hat(). Sie können nur zusätzliche Filter angeben, damit das zugehörige Modell überprüft werden soll.

Beispiel:

Benutzer> Hasmany> Organisation
$ user = user :: won has ('organisationen', function ($ q)
$ q-> WHERE ('CREATE_AT', '> =', 2020-01-01 00:00:00 ');
)-> get ();
// Nur Benutzer, die zu Beginn des Jahres 2020 Organisationen erstellt haben, werden zurückgegeben