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 的模型?