Laravel |数据库播种工厂
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel |数据库播种工厂相关的知识,希望对你有一定的参考价值。
我目前正在了解Laravel工厂及其工作原理。到目前为止,我发现它们非常有用!
我正在为企业创建一个目录,所以我正在尝试在开发过程中播种一些虚拟数据。
目前我已经拥有它,所以它与用户一起创建了一个企业,但现在它开始变得棘手,这就是我在这里发布的原因。
通过业务,我还需要创建类别,位置,图像和联系人。我想他们都会以同样的方式工作,所以我只会询问类别。
基本上我想要做的是创建业务时我想每10个业务创建一个类别,因为这样我就可以显示它们在现实生活中出现的情况。
所以目前我有这个代码......
factory(AppModelsUser::class, 50)->create()->each(function ($u) {
$u->business()->save(factory(AppModelsBusiness::class)->make());
});
这对于创建与用户相关联的业务非常完美,但我会将该类别放在哪里?我必须在这里创作吗?并说每次有10的倍数然后创建一个类别?因为无论如何这个类别都与用户无关,所以我无法做任何像$u->categeory
这样的事情我将不得不访问商业模式。
这是商业类别的工厂......
$factory->define(AppModelsBusinessCategory::class, function (Faker $faker) {
return [
'friendly_name' => $faker->word,
'slug' => ucfirst($faker->word)
]
});
提前致谢。
答案
我没有测试解决方案,所以可能会进行一些微调,但尝试这个并让我知道它是否有效:
// Number of users
$numberOfUsers = 50;
// Will create roughly 1 business category per 10 users
$businessCategories = factory(AppModelsBusinessCategory::class, round($numberOfUsers/10))->create();
factory(AppModelsUser::class, $numberOfUsers)->create()->each(function ($u) use ($businessCategories) {
$business = $u->business()->save(factory(AppModelsBusiness::class)->make());
// Associate it with a random business category
$business->businessCategory()->attach(
$businessCategories->random()->id
);
});
编辑
或者你可以从另一个方向走,做这样的事情:
// Create 5 categories
factory(AppModelsBusinessCategory::class, 5)
->create()
->each(function ($bc) {
// Create 10 users per business category
factory(AppModelsUser::class, 10)->create()->each(function ($u) use ($bc) {
// Create a business for the user
$u->business()
->save(factory(AppModelsBusiness::class)->create([
'business_category_id' => $bc->id // Associate it with the business category
]));
});
});
两种解决方案都假定Business属于BusinessCategory。底部也假设business_category_id
为外键列。
以上是关于Laravel |数据库播种工厂的主要内容,如果未能解决你的问题,请参考以下文章
我可以合并一个运行 insert into 的 .sql 文件和一个在 2 列上创建虚拟数据的 Laravel 工厂播种器吗?
Laravel 8 Jetstream:无法使用使用工厂和播种机播种的帐户登录