42

我有一个users表和与表的一对零/一关系businesses(users.user_id => business.user_id)。在我的users桌子上,我有一个鉴别器,它告诉我用户是否属于业务类型,因此我也需要在businesses桌子上提供详细信息。

我想用我目前正在工作的工厂创建我的用户,然后只创建鉴别器指向企业帐户的业务详细信息。

我心中有三个选择:

  1. 从用户工厂创建,然后使用 '->each()' 对鉴别器进行一些检查,并使用工厂创建一个新的业务用户。但是,我无法将user_id分配给用户的信息传递给业务工厂。
  2. 首先创建用户。然后在我的业务播种器中,检索与“业务”鉴别器匹配的所有用户。然后为所有这些用户运行一个创建业务详细信息的工厂。但同样,我必须以某种方式user_id将已经创建的用户与 business factory联系起来user_id
  3. 在我的业务工厂中,创建一个新用户并检索 id,从而建立 和 之间的users.user_id链接business.user_id。但是,我使用的是随机生成器,user.user_type因此即使我businesses填满了表格,它也可能适用于将鉴别器设为“个人”的用户。

还有其他方法吗?我可以将播种机中的参数传递给工厂吗?

4

3 回答 3

97

您传递给create函数的属性将作为第二个参数传递给您的模型定义回调。


在您的情况下,您甚至不需要访问这些属性,因为它们会自动合并到:

$business = factory(App\Business::class)->create();

factory(App\User::class, 5)->create([
    'business_id' => $business->id,
]);

根据您的需要进行调整。

于 2015-09-03T14:42:48.753 回答
9

我添加多态“管理员”用户的代码是:

// 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
        ])
    );
});

希望这可以帮助。

于 2019-06-23T14:11:49.303 回答
0

发送属性,

factory(App\User::class)->create(['businessId' => $businessId]);

找回来,

$factory->define(App\User::class, function (Faker $faker, $businessInfo) {
    //$businessInfo['businessId']
});
于 2022-02-09T15:40:03.160 回答