Під час використання ->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