Laravel-作为事务存储在两个表中

时间:2019-03-16 20:05:49

标签: php laravel-5 eloquent

我想在两个单独的表中保存两个相关的模型(人和电话号码)作为事务,以便如果人插入失败,则不会存储电话号码。

我尝试了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);
    });



}

1 个答案:

答案 0 :(得分:1)

答案是使用'use'关键字。

DB::transaction(function () use ($newPerson, $phoneNumber ) {
        $newPerson->save();
        $newPerson->phoneNumbers()->save($phoneNumber);
        });