Під час використання ->get()
ви не можете просто використовувати будь-яке з наведених нижче:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
Тому що якщо ви dd($result);
помітите, екземпляр Illuminate\Support\Collection
завжди повертається, навіть коли результатів немає. По суті, те, що ви перевіряєте, - це те, $a = new stdClass; if ($a) { ... }
що завжди повернеться правдою.
Щоб визначити, чи є якісь результати, ви можете виконати будь-що з наступного:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
Ви також можете використовувати ->first()
замість конструктора ->get()
запитів, який поверне екземпляр першої знайденої моделі чи null
іншим способом. Це корисно, якщо вам потрібен або очікуєте лише одного результату від бази даних.
$result = Model::where(...)->first();
if ($result) { ... }
Примітки / Посилання
Інформація про бонус
Відмінності колекції та Builder запитів можуть бути дещо заплутаними для новачків Laravel, оскільки імена методів часто однакові між ними. З цієї причини може бути незрозуміло знати, над чим ви працюєте. Побудовник запитів по суті будує запит, поки ви не викличете метод, де він буде виконувати запит і потрапляти в базу даних (наприклад, коли ви викликаєте певні методи, як-от ->all()
->first()
->lists()
і інші). Ці методи також існують на Collection
об'єкті, який може бути повернутий із Builder Query, якщо буде кілька результатів. Якщо ви не впевнені, з яким класом ви працюєте насправді, спробуйте робити var_dump(User::all())
і експериментувати, щоб дізнатися, які класи він насправді повертається (за допомогоюget_class(...)
). Я настійно рекомендую переглянути вихідний код для класу Collection, це досить просто. Потім перевірте Builder Query і побачите схожість у назвах функцій та дізнайтеся, коли він насправді потрапляє до бази даних.
first()
, результат відрізняється від тогоget()
, що можна перевірити!$result
як порожній результатnull