我有一个users
表和一个与businesses
表(users.user_id => enterprises.user_id)的一对一/一关系。在我的users
表上,我有一个鉴别器,它告诉我用户是否属于业务类型,因此我需要在businesses
表上有详细信息。
我想用我当前正在工作的工厂创建我的用户,然后只创建商业详细信息,其中鉴别器指向商业帐户。
我脑子里有三个选择:
user_id
传递给业务工厂。 user_id
链接到业务工厂user_id
。 users.user_id
和business.user_id
之间建立链接。但是我使用user.user_type
的随机生成器,所以即使我填充了businesses
表,也可能是那些将鉴别器作为“个人”的用户。还有其他方法吗?我可以将Seeder的论据传递给工厂吗?
答案 0 :(得分:53)
传递给create
函数的属性将作为第二个参数传递给模型定义回调。
在您的情况下,您甚至不需要访问这些属性,因为它们会自动合并:
$business = factory(App\Business::class)->create();
factory(App\User::class, 5)->create([
'business_id' => $business->id,
]);
根据您的需要进行调整。
答案 1 :(得分:0)
我添加多态“管理员”用户的代码是:
// 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
])
);
});
希望这会有所帮助。