php - Laravel 在雄辩的保存上试运行
问题描述
保存时有什么方法可以在 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
}
解决方案
数据库事务是您正在寻找的。
数据库事务只保存booking
并且bookingDetails
当它们都很好时。如果其中任何一个失败,则不会保存任何内容。
DB::transaction(function () {
$booking = with(new Booking)->fill(request()->all())->save();
$bookingDetails = with(new BookingDetails)->fill(request()->all())->save();
}, 5);
推荐阅读
- r - 首先使用最短距离在传单中的地图上的 2 点之间绘制一条线
- android - 使用已知的 ssid 和密码让我的 Android 应用程序连接到 Raspberry Pi 4 wifi
- forms - 如何创建小部件并在我的表单中显示?
- mongodb - 为烧瓶 API 水平扩展 MongoDB 数据库并提供基于用户的访问控制
- python - Pandas 用“-”分割每一行的字符串
- javascript - 如何使用 for 循环为音频文件创建动态 URL?Javascript
- list - Flutter 按值排序列表
- c# - 需要通过与“dataAfter”比较来过滤“dataBefore”的数据
- javascript - 如何在 PHP 后获取动态未选中复选框的值
- django - 如何将 Token 添加到扩展 Django Rest Framework 中的用户模型的模型中?