我想在两个单独的表中保存两个相关的模型(人和电话号码)作为事务,以便如果人插入失败,则不会存储电话号码。
我尝试了DB事务外观,但是由于范围可变,模型无法用于关闭。
我收到错误消息:
未定义变量:newPerson
我尝试将它们作为参数添加到闭包中,但这也没有用。
当我在数据库事务之外执行两个保存操作时,它可以正常工作。
public function store(Request $request)
{
$newPerson = new Person;
$newPerson->name_en = 'New Guy';
$newPerson->salutation_id = '1';
$newPerson->gender = '1';
$newPerson->created_by = '1';
$phoneNumber = new PhoneNumber;
$phoneNumber->country_id = '1';
$phoneNumber->phone_number = '055512345';
$phoneNumber->phoneType_id = '5';
$phoneNumber->created_by = '5';
DB::transaction(function () {
$newPerson->save();
$this->$newPerson->phoneNumbers()->save($phoneNumber);
});
}
答案 0 :(得分:1)
答案是使用'use'关键字。
DB::transaction(function () use ($newPerson, $phoneNumber ) {
$newPerson->save();
$newPerson->phoneNumbers()->save($phoneNumber);
});