Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11K subscribers
1.54K photos
27 videos
26 files
4.27K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🧠 Обрабатывайте большие наборы данных порциями (Chunk) в Laravel

Почему это важно
Когда в таблице тысячи или миллионы записей, обычный get() или all() загрузит все строки в память сразу — это:
сильно расточительно по памяти,
может привести к падению по OOM,
скрипт может не успеть выполнить работу целиком.
Для таких ситуаций Laravel предлагает метод chunk(), который загружает данные частями (порциями) вместо всего набора сразу.

🧰 Что делает chunk()
Метод chunk() берет определённое количество записей за раз и передает их в callback для обработки. Laravel автоматически загрузит следующую партию после завершения предыдущей.



use App\Models\User;

User::chunk(200, function ($users) {
foreach ($users as $user) {
// обработка каждого пользователя
}
});


📌 В этом примере Laravel:
загружает 200 пользователей за раз,
обрабатывает их,
затем переходит к следующей партии.

🧠 Почему это круто
Снижение пикового потребления памяти
Вместо загрузки всей таблицы в память — всего 200 записей. Это позволяет обрабатывать десятки и сотни тысяч строк без OOM.
Меньше рисков таймаута
Когда вы делаете работу по частям, выполнение разбивается на небольшие, предсказуемые блоки.
Гибкость для batch-обновлений/экспортов
Дизайн идеально подходит для миграций, обновлений атрибутов, экспортов CSV и фоновых задач.

🔍 Немного про chunkById() и улучшения
Если код обновляет записи внутри цикла, обычный chunk() может вести себя непредсказуемо, потому что набор может меняться. В таких случаях лучше использовать chunkById(), который гарантирует постоянный порядок по id и предотвращает пропуски/повторы при обновлениях.


User::chunkById(200, function ($users) {
foreach ($users as $user) {
$user->update(['active' => true]);
}
});


🧠 Продвинутые приёмы
💡 Жадная загрузка связей: если в обработке вам нужны связи (->with('profile')), загружайте их вместе с батчами — это предотвращает N+1-проблемы внутри chunk.


User::with('orders')->chunk(200, function ($users) {
foreach ($users as $user) {
// $user->orders уже загружены
}
});


💡 Используйте в фоновых командах или джобах: chunk() отлично подходит для консольных команд и jobs, которые работают с большими массивами данных и не должны завершиться по таймауту.

🧠 Когда chunk — не лучший выбор
Если вам нужно просто вывести данные на страницу пользователю — лучше использовать пагинацию, а не chunk. chunk больше для обработки данных внутри приложения, а не для отдачи клиенту.

Библиотека пхпшника
👍31
WANTED: PHP-МАСТЕР

Обвиняется в написании качественного кода на PHP, вопреки всем мемам. Мы ищем того, кто поднимет планку обучения в PHP-сообществе.

Приметы:

— в совершенстве знает PHP (знание Python или Go приветствуется);
— умеет готовить современные фреймворки и чистую архитектуру;
— готов делиться знаниями с большой аудиторией;
— хочет стать медийным экспертом.

Условия:

— гонорар за разработку материалов;
— рост личного бренда и узнаваемости;
— поддержка команды Proglib.

Сдаться властям

P.S. Видел пхпшника, который пишет как бог? Сдай его нам.
👍4
Знаете ли вы, что Laravel предоставляет метод missing() для настройки поведения привязки модели маршрута по умолчанию, когда модель не найдена? 🚀

Библиотека пхпшника

#vardump
5
📚 Learn Docker in a Month of Lunches, 2nd Edition (2025)

Книга учит основам работы с Docker за 22 коротких урока, каждый из которых можно пройти за один обед. Да, без ночных марафонов с документацией.

Что разберешь:

🔹 Как запускать приложения в контейнерах на Linux, Windows и macOS. И наконец перестать писать «ну у меня локально работает».

🔹 Создание и публикация Docker-образов. Собрать → упаковать → отправить в реестр — без магии и слёз.

🔹 Мультиконтейнерные приложения. Docker Compose и Kubernetes как инструменты, а не загадочные существа.

🔹 Наблюдаемость. Как добавить метрики и логи, чтобы понимать, что происходит внутри контейнера.

🔹 CI/CD и облака. Запуск контейнеров в Azure и GCP, деплой через GitHub Actions — практично, коротко, по делу.

🔹 Работа с легаси. Да, можно упаковать Windows-приложение в контейнер и не переписывать всё с нуля.

🔹 Оптимизация образов. Скорость, безопасность и размер — чтобы твой Dockerfile не выглядел как мамонт.

Книга хороша тем, что в ней нет «истории технологий» и прочего «бла-бла», которое съедает время. Только практические уроки и лабораторки, которые можно выполнить между созвонами.

🔗 Скачать

🔹 Курс «Основы IT для непрограммистов»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🐸 Книги для программистов | Поддержать бустом
Please open Telegram to view this post
VIEW IN TELEGRAM