Laravel | База данных посевной фабрики

В настоящее время я узнаю о фабриках Laravel и о том, как они работают. Пока я нашел их действительно полезными!

Я работаю над каталогом для предприятий, поэтому я пытаюсь отбросить некоторые фиктивные данные во время разработки.

В настоящее время он у меня есть, поэтому он создает бизнес вместе с пользователем, однако теперь он начинает усложняться, поэтому я публикую здесь.

С бизнесом мне также нужно создавать категории, местоположения, изображения и контакты. Я полагаю, что все они будут работать одинаково, поэтому я буду только спрашивать о категориях.

По сути, я хочу, чтобы, когда бизнес создавался, я хотел бы создавать категорию каждые 10 компаний, поскольку это позволило бы мне отображать их так, как они выглядят в реальной жизни.

Так что в настоящее время у меня есть этот код...

factory(App\Models\User::class, 50)->create()->each(function ($u) {
    $u->business()->save(factory(App\Models\Business::class)->make());
});

Это идеально подходит для создания бизнеса, связанного с пользователем, но куда бы я поместил категорию? Должен ли я создать здесь? И скажи, каждый раз, когда есть кратное 10, а затем создать категорию? Так как категория никак не связана с пользователем, я бы не смог ничего сделать $u->categeory Я должен был бы получить доступ к бизнес-модели.

Это фабрика для бизнес-категории...

$factory->define(App\Models\BusinessCategory::class, function (Faker $faker) {
    return [
        'friendly_name' => $faker->word,
        'slug' => ucfirst($faker->word)
    ]
});

Заранее спасибо.

1 ответ

Решение

Я не тестировал решение, поэтому, возможно, придется провести некоторую тонкую настройку, но попробуйте это и дайте мне знать, если оно работает:

// Number of users
$numberOfUsers = 50;

// Will create roughly 1 business category per 10 users
$businessCategories = factory(App\Models\BusinessCategory::class, round($numberOfUsers/10))->create();

factory(App\Models\User::class, $numberOfUsers)->create()->each(function ($u) use ($businessCategories) {
    $business = $u->business()->save(factory(App\Models\Business::class)->make());
    // Associate it with a random business category
    $business->businessCategory()->attach(
        $businessCategories->random()->id
    );
});

редактировать

Или вы можете пойти другим путем и сделать что-то вроде этого:

// Create 5 categories
factory(App\Models\BusinessCategory::class, 5)
    ->create()
    ->each(function ($bc) {
        // Create 10 users per business category
        factory(App\Models\User::class, 10)->create()->each(function ($u) use ($bc) {
            // Create a business for the user
            $u->business()
                ->save(factory(App\Models\Business::class)->create([
                    'business_category_id' => $bc->id // Associate it with the business category
                ]));
        });
    });

Оба решения предполагают, что Business принадлежит BusinessCategory. И нижний также предполагает business_category_id для столбца внешнего ключа.

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