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
для столбца внешнего ключа.