Laravel如何保存多个相关模型?

Posted

技术标签:

【中文标题】Laravel如何保存多个相关模型?【英文标题】:Laravel how to save multiple related models? 【发布时间】: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方法。 【参考方案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);

【讨论】:

以上是关于Laravel如何保存多个相关模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 4 中选择相关模型计数为 0 的模型?

laravel 4将IP地址保存到模型

Laravel 4 中相关模型验证的最佳实践?

Laravel/Eloquent - 创建与可能具有或不具有属性的父模型相关的多个子模型的关系

如何知道 laravel 模型值是不是在保存回调时更改

如何在laravel中检索有限数量的相关模型并按相关模型对集合进行排序?