Eloquent ORM довольно хорош, хотя мне интересно, есть ли простой способ настроить транзакции MySQL с использованием innoDB таким же образом, как и PDO, или мне придется расширить ORM, чтобы это стало возможным?
96
Ты можешь сделать это:
DB::transaction(function() {
//
});
Все внутри Closure выполняется внутри транзакции. В случае возникновения исключения произойдет автоматический откат.
Discussed in more detail here
ссылка мертва.Если вам не нравятся анонимные функции:
Обновление : для laravel 4
pdo
объект больше не является общедоступным, поэтому:источник
DB::beginTransaction()
&DB::commit()
&DB::rollback()
. Это было бы немного чище.DB::connection()->getPdo()->beginTransaction();
DB::transaction
обратный вызов with еще чище, но недостатком является то, что если вам нужно указать разные обработчики для разных исключений, вам придется вернуться, чтобы попробовать / поймать техникуЕсли вы хотите использовать Eloquent, вы также можете использовать это
Это всего лишь пример кода из моего проекта
источник
question->id
Выражение на обратный вызов транзакции возвращает ноль.Если вы хотите избежать закрытия и использовать фасады, следуйте инструкциям, чтобы сохранить чистоту и порядок:
Если какой-либо оператор завершится ошибкой, фиксация никогда не будет выполнена, и транзакция не будет обработана.
источник
Я уверен, что вы не ищете решение для закрытия, попробуйте это для более компактного решения
источник
По какой-то причине довольно сложно где-либо найти эту информацию, поэтому я решил опубликовать ее здесь, поскольку моя проблема, хотя и была связана с транзакциями Eloquent, как раз меняла это.
После прочтения ЭТОГО ответа stackoverflow я понял, что в моих таблицах базы данных используется MyISAM вместо InnoDB.
Чтобы транзакции работали на Laravel (или где-то еще, как кажется), необходимо, чтобы ваши таблицы были настроены на использование InnoDB.
Зачем?
Цитата из документов MySQL Transactions и Atomic Operations ( здесь ):
источник
Если произойдет какое-либо исключение, транзакция откатится автоматически.
Формат транзакции Laravel Basic
источник