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\Collectionjest 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 nullinny 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 Collectionobiekcie, 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ą!$resultpustego wynikunull