Laravel如何保存多个关联模型?提交公司及联系人数据的实现方法
问题说明
用户提交的表单数据格式如下:
{ "name": "Company Name1", "contacts": [ { "name":"John Doe", "phone":"123123" }, { "name":"John Doe 2", "phone":"123123" } ] }
需求:用提交的name字段创建一条公司(Company)记录,再为contacts数组中的每个联系人创建一条关联到该公司的联系人记录,是否可以通过createMany类的方法实现该需求?
解答
完全可以通过createMany方法实现该需求,你找到的方案是正确的。createMany是Laravel Eloquent关联关系提供的批量创建方法,在一对多关联上调用该方法时,会自动为每一条批量创建的子记录填充对应的外键字段(比如company_id),不需要手动处理关联逻辑。
之前执行失败的原因是表单漏传了必填字段,修复字段问题后,最终可运行的代码如下:
$arr = $request->safe()->only(['contacts']); $company = Company::create($request->safe()->only(['name'])); $company->contacts()->createMany($arr['contacts']);
注意事项
- 确保
Contact模型的$fillable属性中已经配置了name、phone等需要批量赋值的字段,避免出现批量赋值错误 - 上述代码使用
safe()方法获取经过验证器校验的数据,建议提前在表单请求验证类中定义好name和contacts.*.name、contacts.*.phone的校验规则,保障数据合法性
内容的提问来源于stack exchange,提问作者ulas
相关产品推荐
相关产品推荐

