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
Model::first()
- es handelt sich tatsächlich um die 'erste' Methode des Abfrage-Generators und NICHT um die Sammlung, daher wird die erste aus der Datenbank ausgewählt - esModel::get()
wird jedoch eine Instanz von Illuminate \ Support zurückgegeben \ Sammlung also , wenn Sie getan haben$r = Model::get()
und dann$r->first()
wird es in dieser Sammlung das erste Element herausgreifen.count($result)
funktioniert. Das Hinzufügen dieses Details wäre eine Verbesserung.foreach
Schleife durchlaufen und dann eine dieser Prüfungen verwenden (think :)count($collection->column)
.Ich denke du suchst:
Dies unterscheidet sich von
empty($result)
, was nicht wahr ist, da das Ergebnis eine leere Sammlung ist. Ihr Vorschlag voncount($result)
ist auch eine gute Lösung. Ich kann keine Referenz in den Dokumenten findenquelle
Ich stimme der oben genehmigten Antwort zu. Aber normalerweise verwende ich
$results->isNotEmpty()
die unten angegebene Methode.Es ist ausführlicher als
if(!results->isEmpty())
weil wir manchmal vergessen, '!' vor, was zu unerwünschten Fehlern führen kann.Beachten Sie, dass diese Methode ab Version 5.3 vorhanden ist.
quelle
In Laravel gibt es verschiedene Methoden, um die Anzahl der Ergebnisse zu überprüfen / leer / nicht leer zu überprüfen:
quelle
Ich denke besser zu benutzen
quelle
Ich denke du versuchst so etwas
oder auch verwenden
quelle
Du kannst tun
um die Ergebnisse zu zählen.
Sie können auch verwenden
um zu überprüfen, ob das Ergebnis leer ist oder nicht.
quelle
Gemäß den Angaben der Laravel- Dokumentation können Sie Folgendes verwenden:
Die
isEmpty
Methode gibt zurück,true
wenn die Sammlung leer ist. Andernfallsfalse
wird zurückgegeben.quelle
Laravel gibt also tatsächlich eine Sammlung zurück, wenn
Model::all();
Sie nur eine Sammlung verwenden möchten. Sie möchten ein Array, damit Sie set eingeben können.(array)Model::all();
Dann können Sie array_filter verwenden, um die Ergebnisse zurückzugebenAuf diese Weise können Sie auch Dinge wie tun
count()
.quelle
------ Gelöst ------
In diesem Fall möchten Sie zwei Arten der Zählung für zwei Cace überprüfen
Fall 1:
Wenn das Ergebnis nur einen Datensatz enthält, wählen Sie mit -> first () eine einzelne Zeile aus der Datenbank aus.
Fall 2:
Wenn das Ergebnis eine Reihe von mehrzeiligen anderen Wörtern enthält, verwenden Sie -> get () oder -> all ()
quelle
Sie können verwenden:
$counter = count($datas);
quelle