Сегодня бороздил просторы LinkedIn и наткнулся на вопрос:
Автор радуется, что код работает без ошибок и даже «выглядит нормально», но на там есть ловушка. (Кстати найдете ли вы ее?. Можете в коментах рассказать)
> ❗️ Проблема в том, что после ->get() мы уже получаем Collection и фильтруем данные в памяти (Collection::where()), а не в базе (Builder::where()).
На маленьком датасете всё выглядит красиво, а на проде с тысячами пользователей — вываливается лишняя нагрузка, лишнее потребление памяти и потеря ожидаемого поведения.
И вот что интересно.
С одной стороны, охуенный «тест на внимательность». Готов ли ты за джунами такую хуйню искать?
С другой — не демонстрация ли это проблем в Eloquent и Collection?
Фреймворк гордится тем, что «очень простой и интуитивный», но именно эта простота рождает ситуации, где:
- джун легко спутает
- визуально одинаковые методы (
ошибка не выдаст exception, а тихо превратится в баг производительности.
Вопрос к вам: А для вас #Laravel все еще говно?
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?
Автор радуется, что код работает без ошибок и даже «выглядит нормально», но на там есть ловушка. (Кстати найдете ли вы ее?. Можете в коментах рассказать)
На маленьком датасете всё выглядит красиво, а на проде с тысячами пользователей — вываливается лишняя нагрузка, лишнее потребление памяти и потеря ожидаемого поведения.
И вот что интересно.
С одной стороны, охуенный «тест на внимательность». Готов ли ты за джунами такую хуйню искать?
С другой — не демонстрация ли это проблем в Eloquent и Collection?
Фреймворк гордится тем, что «очень простой и интуитивный», но именно эта простота рождает ситуации, где:
- джун легко спутает
QueryBuilder
и Collection
- визуально одинаковые методы (
where
) на самом деле делают принципиально разноеошибка не выдаст exception, а тихо превратится в баг производительности.
Вопрос к вам: А для вас #Laravel все еще говно?