Laravel 5.7中具有链接关系的种子

时间:2018-12-27 04:31:19

标签: database laravel seeding

我有一个User, CompanyBusinessUnit模型,已经创建了关系,并且我想在这种情况下使用模型工厂进行数据库播种:

  
      
  1. 每个用户都有一个公司
  2.   
  3. 每个公司都属于一个用户,并且有许多BusinessUnit
  4.   
  5. 每个BusinessUnit都属于公司
  6.   

我创建了这段代码来植入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中   (iconnamedescriptionaddresscompany_idupdated_atcreated_at)值(//via.placeholder .com / 150,个人简历,民俗杂志,民意调查和收藏,4300巴特尔·福特   Elijahton,TX 34915-7562,,2018-12-27 11:24:42,2018-12-27 11:24:42))

有什么合适的方法吗?我已经阅读了文档,但是对此一无所知。请帮忙。

1 个答案:

答案 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()
            );
        })
    );
});