Php 如果另一条记录未能保存/存储,如何回滚新记录

Php 如果另一条记录未能保存/存储,如何回滚新记录,php,mysql,database,laravel-5,Php,Mysql,Database,Laravel 5,我想直接将数据存储在5个表中。我成功地将数据存储/保存在4个表中,但在最后一个表中出现错误。如何回滚前4个表中的记录 这是我的控制器 $booking = new Book(); $booking->date = Carbon::now(); $booking->unique_number = mt_rand(1, 999); $booking->save(); $bookingDetail = new BookDetail(); $bookingDetail->book

我想直接将数据存储在5个表中。我成功地将数据存储/保存在4个表中,但在最后一个表中出现错误。如何回滚前4个表中的记录

这是我的控制器

$booking = new Book();
$booking->date = Carbon::now();
$booking->unique_number = mt_rand(1, 999);
$booking->save();
$bookingDetail = new BookDetail();
$bookingDetail->book()->associate($booking);
$bookingDetail->qty = $request->qty;
$bookingDetail->event_id = $id;
$bookingDetail->price = $event->price;
$bookingDetail->subtotal = $bookingDetail->qty * $bookingDetail->price;
$bookingDetail->save();
$booking->total = $bookingDetail->subtotal + $booking->unique_number;
$booking->save();
$bookingConfirmation = new BookConfirmation();
$bookingConfirmation->book()->associate($booking);
$bookingConfirmation->save();
$bookingCompletion = new BookCompletion();
$bookingCompletion->book()->associate($booking);
$bookingCompletion->save();
$participants = explode(', ', $request->participant_name);
if(count($participants) === $bookingDetail->qty){
    foreach ($participants as $participant) {
        $bookingParticipant = new BookParticipant();
        $bookingParticipant->participant_name = $participant;
        $bookingParticipant->save();
    }
}else{
    echo '<script language="javascript">alert("Jumlah orang tidak sesuai")</script>';
}
$booking=新书();
$booking->date=Carbon::now();
$booking->unique_number=mt_rand(1999);
$booking->save();
$bookingDetail=新的BookDetail();
$bookingDetail->book()->associate($booking);
$bookingDetail->qty=$request->qty;
$bookingDetail->event_id=$id;
$bookingDetail->price=$event->price;
$bookingDetail->小计=$bookingDetail->数量*$bookingDetail->价格;
$bookingDetail->save();
$booking->total=$bookingdail->subtotal+$booking->unique\u number;
$booking->save();
$bookingConfirmation=新建BookConfirmation();
$bookingConfirmation->book()->associate($booking);
$bookingConfirmation->save();
$bookingCompletion=新的BookCompletion();
$bookingCompletion->book()->associate($booking);
$bookingCompletion->save();
$participants=explode(“,”,$request->participant_name);
if(计数($participants)==$bookingDetail->qty){
foreach($参与者作为$参与者){
$bookingParticipant=新建BookParticipant();
$bookingParticipant->participant\u name=$participant;
$bookingParticipant->save();
}
}否则{
回声“警报”(Jumlah orang tidak sesuai);
}

您可以通过回滚方法回滚事务:

DB::rollBack();
如果希望手动开始事务并完全控制回滚和提交,可以在DB facade上使用beginTransaction方法:

DB::beginTransaction();
您可以使用try-catch块,这样如果任何想法出错,那么在catch块中您可以回滚事务

DB::beginTransaction();
    try{
    here you can add your code to exicute and commit db transaction
    } catch (Exception $e) {
        DB::rollback();

    }
参考:

这里也已经回答了堆栈问题

我已经看过文档了。。但是我不明白如何在我的代码中实现它。。你能给我一个样品吗?可能是