Фабрика Laravel не может спасти отношения - PullRequest
0 голосов
/ 17 декабря 2018

Я использую 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());
        })
    );
});

Все hasMany отношений.

При этом у меня появляется эта ошибка:

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

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

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

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

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

1 Ответ

0 голосов
/ 17 декабря 2018

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

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.

...