Пробежка по Ларавелю на красноречивом спасении - PullRequest
0 голосов
/ 10 мая 2019

Есть ли способ выполнить пробный прогон в Laravel при сохранении?

Допустим, у меня есть 2 модели, Booking и BookingDetails. Я не хочу, чтобы один из них сохранялся без другого.

Сейчас я заполняю сбережения вот так:

 // Create new booking

  try
  {
       $booking = with(new Booking)->fill(request()->all())->save();
       $bookingDetails = with(new BookingDetails)->fill(request()->all())->save();
  }
  catch (\Exception $e)
  {
       // Die quietly
  }

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

Есть ли какой-нибудь способ, которым я могу выполнить пробный прогон и проверить работу всех сохранений, и если они это делают, и все они в порядке, за исключением реального? Вместо того, чтобы делать что-то подобное

 // Create new booking

  try
  {
       $booking = with(new Booking)->fill(request()->all())->save();
       try
       {
           $bookingDetails = with(new BookingDetails)->fill(request()->all())->save();
       }
       catch (\Exception $ex)
       {
            // Find the booking here and delete, because the details cant be saved
       }
  }
  catch(\Exception $e)
  {
       // Die quietly
  }

1 Ответ

3 голосов
/ 10 мая 2019

Транзакция БД - это то, что вы ищете.

Транзакция в БД сохраняет booking и bookingDetails только тогда, когда они оба исправны.Если один из них не работает, ничего не сохраняется.

DB::transaction(function () {
       $booking = with(new Booking)->fill(request()->all())->save();
       $bookingDetails = with(new BookingDetails)->fill(request()->all())->save();
}, 5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...