Выбор ответа Senior Eloquent, N+1 и миграции обновлено
Обработка миллиона записей
Вопрос
Нужно пройти по миллиону заказов и пересчитать поле. Что выбрать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Order::lazyById(1000) или chunkById(1000, ...) по ключу. all() и get() загрузят миллион моделей в память. chunkById и lazyById читают пачками по id последний, это надёжно даже при изменении записей во время обхода. chunk с OFFSET может пропускать строки, если обновление меняет условие выборки.…
Варианты ответа
Order::all()иforeachс сохранением каждой моделиOrder::get()->each(...)с обновлением внутри колбэкаOrder::lazyById(1000)илиchunkById(1000, ...)по ключуправильный ответOrder::cursor()с обновлением колонки сортировки по ходу обхода
Разбор
all() и get() загрузят миллион моделей в память. chunkById и lazyById читают пачками по id > последний, это надёжно даже при изменении записей во время обхода. chunk с OFFSET может пропускать строки, если обновление меняет условие выборки. cursor() экономит память на моделях, но держит один запрос и буферизованный результат, а изменение колонки сортировки по ходу ломает обход.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.