Нужно создать модель Order , заполнить ее данными Далее нужно заполнить данными связанную модель OrderProducts И вот на этом этапе могут возникать ошибки и нужно чтоб вся цепочка откатилась Я так понимаю что при работе с моделями DB::rollBack() не работает?
за транзакции учти что если у тебя длительная операция то таблица над которой идет транзакция будет недоступна для других запросов юзеров и будет плевать 500-е с текстом SQL STATE 0200
так что лучше самому в catch отлавливать ошибки и вручную удалять такой заказ?
лучше да сделай массив в которых запоминаешь то что сделал и при ошибке вызвать ункцию которая по массиву в обратную сторону откатит операции ну либо рисковатьс транзакциями но надо окуратно чтоб не забанить кусок проекта для запросов о других юзеров
это с какой стати она будет не доступна?
DB::transaction(function() { // вот тут творишь все что нужно и если будет ошибка, rollback будет автоматом });
Наверно инфраструктура наверно так настроена)) В один поток всё)
если там какая нибудь продолжительная логика при которой в начале открывается транзакция и коммитится под конец то второй пользователь получит ворох исключений если попытается выполнить над теми же таблицами операции вставки или что то еще пока транзакция не завершилась
все будет хорошо, не будет ворохов или еще чего то
ну были такие траблы в проекте один человек добавилтранзакций потом попытка вызвать этот же функционал другим пользователем сыпала ошибки от sql - да там бд в однопотоке и длительный импорт из файла
если бездумно использовать lockForUpdate() то да можно огрести проблем, но в данном случае речи о сторонних сервисах не шло, все рамках дозволенного, потому проблем не должно быть
То есть если хотя бы одна запись косячная, то весь импорт откатывался?
в том и суть транзакций если в коде происходит исключение когда открыта транзакция то она откатывается
Обсуждают сегодня