Сегодня бороздил просторы LinkedIn и наткнулся на вопрос:

`Can you spot the issue in this snippet?

$users = User::where('status', 'active')->get();

if ($users->count() > 0) { $users = $users->where('role', 'admin'); }

return view('users.index', compact('users'));

The code runs without errors, and the output even looks fine. But there’s a hidden conceptual problem here that could cause serious trouble in real-world projects.

Question: Where exactly is the problem, why is this approach risky, and what would be the correct way to fix it?

Автор радуется, что код работает без ошибок и даже «выглядит нормально», но на там есть ловушка. (Кстати найдете ли вы ее?. Можете в коментах рассказать)

❗️ Проблема в том, что после ->get() мы уже получаем Collection и фильтруем данные в памяти (Collection::where()), а не в базе (Builder::where()). На маленьком датасете всё выглядит красиво, а на проде с тысячами пользователей — вываливается лишняя нагрузка, лишнее потребление памяти и потеря ожидаемого поведения. И вот что интересно. С одной стороны, охуенный «тест на внимательность». Готов ли ты за джунами такую хуйню искать? С другой — не демонстрация ли это проблем в Eloquent и Collection?

Фреймворк гордится тем, что «очень простой и интуитивный», но именно эта простота рождает ситуации, где:

  • джун легко спутает QueryBuilder и Collection
  • визуально одинаковые методы (where) на самом деле делают принципиально разное

ошибка не выдаст exception, а тихо превратится в баг производительности.

Вопрос к вам: А для вас #Laravel все еще говно?`

Сегодня бороздил просторы LinkedIn и наткнулся на вопрос:
`Can you spot the issue in this snippet?
$users = User::where('status', 'active')->get();
if ($users->count() > 0) {
$users = $users->where('r... | Сетка — социальная сеть от hh.ru Сегодня бороздил просторы LinkedIn и наткнулся на вопрос:
`Can you spot the issue in this snippet?
$users = User::where('status', 'active')->get();
if ($users->count() > 0) {
$users = $users->where('r... | Сетка — социальная сеть от hh.ru