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