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

Php Laravel-作为事务存储在两个表中,php,laravel-5,eloquent,Php,Laravel 5,Eloquent,我想将两个相关模型(person和phone number)作为事务保存在两个单独的表中,以便在person insert失败时不会存储电话号码 我尝试了DB事务facade,但由于作用域可变,闭包无法使用这些模型 我收到错误消息: 未定义变量:newPerson 我尝试将它们作为参数添加到闭包中,但它也不起作用 在DB事务之外执行两个保存操作时,它工作正常 public function store(Request $request) { $newPerson = new

我想将两个相关模型(person和phone number)作为事务保存在两个单独的表中,以便在person insert失败时不会存储电话号码

我尝试了DB事务facade,但由于作用域可变,闭包无法使用这些模型

我收到错误消息:

未定义变量:newPerson

我尝试将它们作为参数添加到闭包中,但它也不起作用

在DB事务之外执行两个保存操作时,它工作正常

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);
    });



}

答案是使用“use”关键字

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

答案是使用“use”关键字

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