【问题标题】:Laravel - storing in two tables as a transaction [duplicate]Laravel - 作为事务存储在两个表中[重复]
【发布时间】:2019-03-16 20:05:49
【问题描述】:

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

我尝试了 DB 事务外观,但由于范围可变,模型对闭包不可用。

我收到错误消息:

未定义变量:newPerson

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

当我在 DB Transaction 之外执行两个保存操作时,它可以正常工作。

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



}

【问题讨论】:

    标签: php laravel-5 eloquent


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2020-12-06
      • 2018-07-20
      相关资源
      最近更新 更多