2016-08-17 3 views
0

У меня следующие отношения: A Ученица имеет отношение «один к одному» с Лицо. У человека есть отношение «многие ко многим» с Адрес.Laravel 5.1: Как выполнить блок транзакций?

Я хочу сохранить данные: сначала создайте Личность, создайте Адреса, а затем создайте Студент.

Но я хочу откатить трансакции, если какая-либо ошибка возникает во время сохранения в любой из этих таблиц. Пример. Если я сохраню Личность и Адреса, а Студент терпит неудачу, я хочу отменить все.

Как с этим справиться?

Спасибо.

+0

Не могли бы вы показать свои попытки и результаты? – katzenhut

+0

@ katzenhut, я постараюсь дать отзыв. Но я спросил об Eloquent, потому что в моем проекте мы решили не использовать фасад БД. Мы используем только функции от Eloquent. –

ответ

4

Laravel обеспечивает разнообразный простой способ справиться с такой ситуацией.

DB::transaction(function() { 
    //all your codes 
}); 

От Laravel Документация:

Чтобы запустить набор операций в рамках транзакциибазы данных, вы можете использовать метод транзакций на фасаде DB. Если исключение составляет thrown в рамках сделки Закрытие сделки автоматически будет откат. Если Закрытие успешно завершило , транзакция будет автоматически совершена. Вам не нужно беспокоиться о ручном откате или фиксации при использовании метода транзакции.

Кроме того, если вы хотите сделать это вручную, вы можете сделать это с помощью

DB::beginTransaction(); 
    //your codes 
    DB::commit(); 

Чтобы узнать больше о сделках, читайте официальный документ Here

+0

Спасибо. Есть ли способ сделать это с Eloquent? –

+0

@AndrezaVieira предоставленное решение * является * Красноречивым. Eloquent обертывает классы, используемые фазой DB. – Luceos

+0

@ Luceos, спасибо. –

Смежные вопросы