【问题标题】:Seeding with chained relationship in Laravel 5.7在 Laravel 5.7 中以链式关系播种
【发布时间】:2019-05-25 04:07:10
【问题描述】:

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

  1. 每个用户都有一个公司
  2. 每个公司都属于一个用户,并有许多业务单位
  3. 每个业务单元都属于一个公司

我创建了这段代码来播种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, Aspernatur consectetur quia vitae., Odio natus et eaque aut neque. Corrupti illo optio aut quas reiciendis est. Officiis doloribus vitae aliquam cupiditate dolor., 4300 Bartell Fords Elijahton, TX 34915-7562, , 2018-12-27 11:24:42, 2018-12-27 11:24:42))

有什么合适的方法吗?我已经阅读了文档,但仍然没有任何线索。请帮忙。

【问题讨论】:

标签: database laravel seeding


【解决方案1】:

应在分配业务单位之前创建公司。在您的代码中,您不是在创建公司,而只是创建公司对象数组并尝试将业务部门与它们关联起来。

试试这个,

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

【讨论】:

    猜你喜欢
    • 2016-05-28
    • 2019-01-05
    • 2018-08-28
    • 2019-07-13
    • 2017-12-29
    • 1970-01-01
    • 2019-11-17
    • 2019-06-28
    • 2019-06-19
    相关资源
    最近更新 更多