Фабрика Laravel не может спасти отношения

Я использую Laravel 5.6, и у меня проблема с сеялкой.

Я использую это:

factory(\App\Models\Merchant::class)->create([
    'email' => 'admin@domain.com',
])->each(function ($m) {
    $m->stores()->save(factory(\App\Models\Store::class)->create()
        ->each(function ($s) {
            $s->products()->save(factory(\App\Models\Product::class, 10)->create());
        })
    );
});

Все имеют много отношений.

Делая это, у меня есть эта ошибка:

Общая ошибка: 1364 Поле 'merchant_id' не имеет значения по умолчанию (SQL: вставить в stores....)

Как будто мои первые $stores->save( ...) не используют созданного продавца.

В моей БД я создал одного продавца.

Если я использую ->make() вместо ->create(), это работает для Магазина, но я не могу сохранить продукты, потому что это не сохраняется...

Можно ли использовать многократное сохранение на таких фабриках?

1 ответ

Решение

Ваш код может нуждаться в небольшом рефакторинге, так как вы можете неправильно составлять цепочки при создании моделей:

factory(\App\Models\Merchant::class, 2)->create([
    'email' => 'admin@domain.com',
])->each(function ($m) {
    $store = factory(\App\Models\Store::class)->create(['merchent_id' => $m->id]);
    factory(\App\Models\Product::class, 10)->create(['store_id' -> $store->id]);
    );
});

Примечание: чтобы использовать ->each() метод, вам нужно иметь collection пример. Я не думаю, что создание только одного продавца вернет коллекцию. В примере мы создаем 2 merchents,

Другие вопросы по тегам