我想将一个父项及其所有子项插入数据库。如果任何孩子无法创建,我想中止整个交易。
我试过使用以下代码片段:
DB::beginTransaction();
try
{
// Create parent item
$one = new ModelOne();
$one->key = 'Parent Key';
$one->title = 'Parent title';
$one->save();
// Create child items
foreach ($items as $item) {
$two = new ModelTwo();
$two->parent_id = $one->id;
$two->content = $item->content;
$two->status = $item->status;
$two->save();
}
DB::commit();
return response(['message'=>'ALL GOOD'], 200);
}
catch (\ Illuminate\Database\QueryException $e)
{
DB::rollBack();
return response(['message'=>'FAILURE'], 500);
}
然而,当抛出异常时(比如因为一个键在孩子之间重复)ModelOne($one)被保存在数据库中,即使DB::commit()从未被调用。
我错过了什么?
我正在使用 Laravel 5.1。
汪汪一只猫
翻过高山走不出你