如何将参数传递给 Laravel 个工厂?
How to pass arguments to Laravel factories?
我有 users
table 和 one-to-zero/one 关系 businesses
table (users.user_id => businesses.user_id).在我的 users
table 上,我有一个鉴别器,它告诉我用户是否属于业务类型,因此我还需要了解 businesses
table 的详细信息。
我想用我目前正在工作的工厂创建我的用户,然后只创建鉴别器指向企业帐户的业务详细信息。
我心里有3个选择:
- 从用户工厂创建,然后使用“->each()”对鉴别器进行一些检查并使用工厂创建新的业务用户。但是我无法将分配给用户的
user_id
传递给业务工厂。
- 首先创建用户。然后在我的 Business seeder 中,检索与 'business' 鉴别符匹配的所有用户。然后为所有这些用户 运行 创建业务详细信息的工厂。但同样,我将不得不 link 以某种方式
user_id
已经使用业务工厂 user_id
创建的用户。
- 在我的业务工厂中,创建一个新用户并检索id,从而使link介于
users.user_id
和business.user_id
之间。但是,我正在为 user.user_type
使用随机生成器,所以即使我填充了 businesses
table,它也可能适用于鉴别器为 'personal'.[=34= 的用户]
还有别的办法吗?我可以将参数从我的 Seeder 传递到工厂吗?
您传递给 create
函数的属性将作为第二个参数传递到您的模型定义回调中。
在您的情况下,您甚至不需要访问这些属性,因为它们会自动合并到:
$business = factory(App\Business::class)->create();
factory(App\User::class, 5)->create([
'business_id' => $business->id,
]);
根据您的需要进行调整。
我添加多态 'Admin' 用户的代码是:
// run model factory
factory(App\Admin::class, 3)->create()->each(function ($admin) {
$admin->user()->save(
// solved: https://laravel.com/docs/master/database-testing#using-factories (Overriding attributes)
factory(App\User::class)->make([
'userable_id' => $admin->id,
'userable_type' => App\Admin::class
])
);
});
希望对您有所帮助。
发送属性,
factory(App\User::class)->create(['businessId' => $businessId]);
取回,
$factory->define(App\User::class, function (Faker $faker, $businessInfo) {
//$businessInfo['businessId']
});
我有 users
table 和 one-to-zero/one 关系 businesses
table (users.user_id => businesses.user_id).在我的 users
table 上,我有一个鉴别器,它告诉我用户是否属于业务类型,因此我还需要了解 businesses
table 的详细信息。
我想用我目前正在工作的工厂创建我的用户,然后只创建鉴别器指向企业帐户的业务详细信息。
我心里有3个选择:
- 从用户工厂创建,然后使用“->each()”对鉴别器进行一些检查并使用工厂创建新的业务用户。但是我无法将分配给用户的
user_id
传递给业务工厂。 - 首先创建用户。然后在我的 Business seeder 中,检索与 'business' 鉴别符匹配的所有用户。然后为所有这些用户 运行 创建业务详细信息的工厂。但同样,我将不得不 link 以某种方式
user_id
已经使用业务工厂user_id
创建的用户。 - 在我的业务工厂中,创建一个新用户并检索id,从而使link介于
users.user_id
和business.user_id
之间。但是,我正在为user.user_type
使用随机生成器,所以即使我填充了businesses
table,它也可能适用于鉴别器为 'personal'.[=34= 的用户]
还有别的办法吗?我可以将参数从我的 Seeder 传递到工厂吗?
您传递给 create
函数的属性将作为第二个参数传递到您的模型定义回调中。
在您的情况下,您甚至不需要访问这些属性,因为它们会自动合并到:
$business = factory(App\Business::class)->create();
factory(App\User::class, 5)->create([
'business_id' => $business->id,
]);
根据您的需要进行调整。
我添加多态 'Admin' 用户的代码是:
// run model factory
factory(App\Admin::class, 3)->create()->each(function ($admin) {
$admin->user()->save(
// solved: https://laravel.com/docs/master/database-testing#using-factories (Overriding attributes)
factory(App\User::class)->make([
'userable_id' => $admin->id,
'userable_type' => App\Admin::class
])
);
});
希望对您有所帮助。
发送属性,
factory(App\User::class)->create(['businessId' => $businessId]);
取回,
$factory->define(App\User::class, function (Faker $faker, $businessInfo) {
//$businessInfo['businessId']
});