Bei der Verwendung können ->get()
Sie nicht einfach eines der folgenden Elemente verwenden:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
Denn wenn Sie dd($result);
feststellen, dass eine Instanz von Illuminate\Support\Collection
immer zurückgegeben wird, auch wenn keine Ergebnisse vorliegen. Im Wesentlichen überprüfen Sie, $a = new stdClass; if ($a) { ... }
was immer true zurückgibt.
Um festzustellen, ob Ergebnisse vorliegen, können Sie folgende Schritte ausführen:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
Sie können auch ->first()
anstelle von verwenden->get()
Abfrage-Generators verwenden, der eine Instanz des zuerst gefundenen Modells zurückgibt, oder auf null
andere Weise. Dies ist nützlich, wenn Sie nur ein Ergebnis von der Datenbank benötigen oder erwarten.
$result = Model::where(...)->first();
if ($result) { ... }
Anmerkungen / Referenzen
Bonusinformationen
Die Unterschiede zwischen Collection und Query Builder können für Neulinge von Laravel etwas verwirrend sein, da die Methodennamen zwischen beiden häufig gleich sind. Aus diesem Grund kann es verwirrend sein zu wissen, an welchem Sie arbeiten. Der Abfrage-Generator erstellt im Wesentlichen eine Abfrage, bis Sie eine Methode aufrufen, mit der die Abfrage ausgeführt und die Datenbank aufgerufen wird (z. B. wenn Sie bestimmte Methoden wie ->all()
->first()
->lists()
und andere aufrufen ). Diese Methoden sind auch für das Collection
Objekt vorhanden, die vom Abfrage-Generator zurückgegeben werden können, wenn mehrere Ergebnisse vorliegen . Wenn Sie nicht sicher sind, mit welcher Klasse Sie tatsächlich arbeiten, versuchen Sie esvar_dump(User::all())
experimentieren, um festzustellen, welche Klassen tatsächlich zurückgegeben werden (mithilfe vonget_class(...)
). Ich empfehle Ihnen dringend, den Quellcode für die Collection-Klasse zu überprüfen. Es ist ziemlich einfach. Überprüfen Sie dann den Abfrage-Generator, sehen Sie die Ähnlichkeiten in den Funktionsnamen und finden Sie heraus, wann er tatsächlich in die Datenbank gelangt.
first()
, das Ergebnis anders ist alsget()
, was mit!$result
als leeres Ergebnis überprüft werden kannnull