Podczas korzystania ->get()
nie można po prostu użyć żadnego z poniższych:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
Ponieważ jeśli dd($result);
zauważysz, instancja Illuminate\Support\Collection
jest zawsze zwracana, nawet jeśli nie ma żadnych wyników. Zasadniczo sprawdzasz, $a = new stdClass; if ($a) { ... }
co zawsze zwróci prawdę.
Aby ustalić, czy są jakieś wyniki, możesz wykonać dowolną z następujących czynności:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
Możesz również użyć ->first()
zamiast w ->get()
kreatorze zapytań, który zwróci instancję pierwszego znalezionego modelu, lub w null
inny sposób. Jest to przydatne, jeśli potrzebujesz lub oczekujesz tylko jednego wyniku z bazy danych.
$result = Model::where(...)->first();
if ($result) { ... }
Uwagi / referencje
Informacje o premiach
Różnice między Kolekcją a Konstruktorem kwerend mogą być nieco mylące dla nowicjuszy Laravela, ponieważ nazwy metod między nimi są często takie same. Z tego powodu wiedza, nad którą pracujesz, może być myląca. Konstruktor kwerend zasadniczo buduje kwerendę, dopóki nie wywołasz metody, w której wykona kwerendę i trafi do bazy danych (np. Gdy wywołasz niektóre metody, takie jak ->all()
->first()
->lists()
i inne). Te metody istnieją również na Collection
obiekcie, który można zwrócić z Konstruktora zapytań, jeśli istnieje wiele wyników. Jeśli nie masz pewności, z jaką klasą faktycznie pracujesz, spróbuj zrobić var_dump(User::all())
i eksperymentować, aby zobaczyć, jakie klasy faktycznie zwraca (z pomocąget_class(...)
). Bardzo polecam sprawdzenie kodu źródłowego klasy Collection, jest to dość proste. Następnie sprawdź Konstruktor zapytań, zobacz podobieństwa w nazwach funkcji i dowiedz się, kiedy faktycznie trafi ono do bazy danych.
first()
, wynik jest inny niż tenget()
, który można sprawdzić za pomocą!$result
pustego wynikunull
Model::first()
- działa on zgodnie z metodą „first” konstruktora zapytań, a NIE z kolekcji, dlatego wybierze pierwszą z bazy danych - jednakModel::get()
zwróci instancję Illuminate \ Support \ Kolekcja więc jeśli nie$r = Model::get()
, a następnie$r->first()
będzie ona wyłowić pierwszy element w tej kolekcji.count($result)
działa; dodanie tego szczegółu byłoby ulepszeniem.foreach
pętli, a następnie użyć jednego z tych sprawdzeń (pomyśl:)count($collection->column)
.Myślę, że szukasz:
Różni się to od
empty($result)
, co nie będzie prawdą, ponieważ wynikiem będzie pusta kolekcja. Twoja sugestiacount($result)
jest również dobrym rozwiązaniem. Nie mogę znaleźć żadnego odniesienia w dokumentacjiźródło
Zgadzam się z powyższą zatwierdzoną odpowiedzią. Ale zwykle używam
$results->isNotEmpty()
metody podanej poniżej.Jest bardziej gadatliwy niż
if(!results->isEmpty())
dlatego, że czasami zapominamy dodać „!” z przodu, co może spowodować niepożądany błąd.Zauważ, że ta metoda istnieje od wersji 5.3 .
źródło
Istnieje kilka metod podanych w Laravel do sprawdzania liczby wyników / sprawdzenia pustych / niepustych:
źródło
Myślę, że lepiej go użyć
źródło
Myślę, że próbujesz czegoś takiego
lub też użyj
źródło
Możesz to zrobić
policzyć wyniki.
Możesz także użyć
aby sprawdzić, czy wynik jest pusty.
źródło
Zgodnie z dokumentacją Laravel Documentation możesz użyć tej metody:
isEmpty
Metoda zwracatrue
jeśli kolekcja jest pusta; w przeciwnym raziefalse
jest zwracany.źródło
więc Laravel faktycznie zwraca kolekcję, gdy po prostu
Model::all();
nie używasz kolekcji, chcesz tablicę, więc możesz wpisać set.(array)Model::all();
następnie możesz użyć array_filter, aby zwrócić wynikipozwoli ci to również robić takie rzeczy
count()
.źródło
------ROZWIĄZANY------
w takim przypadku chcesz sprawdzić dwa typy liczenia dla dwóch cykli
przypadek 1:
jeśli wynik zawiera tylko jeden rekord inne słowo, wybierz pojedynczy wiersz z bazy danych za pomocą -> first ()
przypadek 2:
jeśli wynik zawiera zestaw wielu wierszy inne słowo za pomocą -> get () lub -> all ()
źródło
Możesz użyć:
$counter = count($datas);
źródło