PHP Fart Time
1.8K subscribers
91 photos
4 videos
2 files
185 links
Привет, фартаны!

Дурачимся, пилим OpenSource и рассказываем про пердовые технологии в php.

Авторы контента: @roxblnfk и @butschster
Download Telegram
Сегодня бороздил просторы 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 все еще говно?
20😁133🤔2