【问题标题】:Laravel how to save multiple related models?Laravel如何保存多个相关模型?
【发布时间】:2021-12-31 10:42:21
【问题描述】:

我的表单发布此数据

{
  "name": "Company Name1",
  "contacts": [ 
    {
      "name":"John Doe",
      "phone":"123123"
    },
    {
      "name":"John Doe 2",
      "phone":"123123"
    }
  ]
}

我想用名称创建一个公司,然后为联系人中的每个联系人创建与该公司相关的新联系人关系。

你们知道如何使用 createMany 或类似的东西来做到这一点吗?

解决方案

伙计们,我意识到我在修复后忘记使用表单发送特定的所需数据,我意识到我可以使用此代码存储数据

$company->contacts()->createMany($request->contacts);

这是代码的最后一个版本

$arr = $request->safe()->only(['contacts']);
$company = Company::create($request->safe()->only(['name']));
$company->contacts()->createMany($arr['contacts']);

【问题讨论】:

  • 你可以使用upsert方法。

标签: php laravel eloquent eloquent-relationship


【解决方案1】:

我显然解决了这种情况,我可以像这样存储数据

$company->contacts()->createMany($request->contacts);

但是在发送数据时,我忘记发送所需的输入,因此无法正常工作。

【讨论】:

    【解决方案2】:

    有多种方法可以做到这一点。途中将使用 saveMany 方法:

    $company = new Company;
    $company->name = "Your Company Name";
    $company->save();
    
    $company->contacts()->saveMany([
        new App\Models\Contact([ "name"=>"John Doe", "phone"=>"123123","company_id"=> $company->id ],),
        new App\Models\Contact([ "name"=>"John Doe", "phone"=>"123123","company_id"=> $company->id ],),
    ]);
    

    https://laravel.com/docs/5.5/eloquent-relationships#the-save-method

    【讨论】:

    • 感谢您的回答我已经解决了这个问题并添加了我的代码的最新版本。
    • 我已经读过了。它将显示此用例存在多种解决方案。
    【解决方案3】:

    你可以在 laravel 中使用 insert 方法批量插入记录

    创建一个新的公司记录,然后使用该公司的 id 将记录插入到联系人表中

    $company = new Company;
    $company->name = "Your Company Name";
    $company->save();
    $data = [
               [ "name"=>"John Doe", "phone"=>"123123","company_id"=> $company->id ],
               [ "name"=>"John Doe", "phone"=>"123123","company_id"=> $company->id ]
            ];
    Contact::insert($data);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2017-11-04
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多