我有一个User, Company
和BusinessUnit
模型,已经创建了关系,并且我想在这种情况下使用模型工厂进行数据库播种:
- 每个用户都有一个公司
- 每个公司都属于一个用户,并且有许多BusinessUnit
- 每个BusinessUnit都属于公司
我创建了这段代码来植入Company
,并且可以正常工作
factory(App\User::class, 5)->create()->each(function ($user) {
$user->company()->saveMany(
factory(App\Company::class, 5)->make()
);
});
但是当我尝试像这样添加BusinessUnit
时:
factory(App\User::class, 5)->create()->each(function ($user) {
$user->company()->saveMany(
factory(App\Company::class, 5)->make()->each(function ($company) {
$company->businessUnit()->saveMany(
factory(App\BusinessUnit::class, 50)->make()
);
})
);
});
我收到此错误:
SQLSTATE [23000]:违反完整性约束:1048列'company_id'不能为空(SQL:插入
business_units
中 (icon
,name
,description
,address
,company_id
,updated_at
,created_at
)值(//via.placeholder .com / 150,个人简历,民俗杂志,民意调查和收藏,4300巴特尔·福特 Elijahton,TX 34915-7562,,2018-12-27 11:24:42,2018-12-27 11:24:42))
有什么合适的方法吗?我已经阅读了文档,但是对此一无所知。请帮忙。
答案 0 :(得分:0)
应在分配业务部门之前创建公司。在您的代码中,您不是在创建公司,而是在创建公司对象数组并尝试将业务部门与它们相关联。
尝试一下
factory(App\User::class, 5)->create()->each(function ($user) {
$user->company()->saveMany(
factory(App\Company::class, 5)->create(['user_id' => $user->id])->each(function ($company) {
$company->businessUnit()->saveMany(
factory(App\BusinessUnit::class, 50)->make()
);
})
);
});