users
テーブルとbusinesses
テーブルとの1対0または1の関係があります(users.user_id => businesss.user_id)。私のusers
テーブルには、ユーザーのタイプがビジネスかどうかを示す弁別子があり、そのためbusinesses
テーブルの詳細も必要です。
現在機能している私の工場でユーザーを作成し、その後、弁別担当者がビジネスアカウントを指すビジネスの詳細のみを作成したいと考えています。
私には3つの選択肢があります。
user_id
をビジネスファクトリーに渡すことはできません。user_id
をビジネスファクトリuser_id
にリンクする必要があります。users.user_id
とbusiness.user_id
の間のリンクを作成します。しかし、私はuser.user_type
にランダムジェネレーターを使用しているので、businesses
テーブルに入力しても、弁別子が「個人」であるユーザー向けである可能性があります。別の方法はありますか? Seederから工場に引数を渡すことはできますか?
create
関数に渡す属性は、2番目の引数としてモデル定義コールバックに渡されます。
あなたの場合、それらは自動的にマージされるので、これらの属性にアクセスする必要さえありません:
$business = factory(App\Business::class)->create();
factory(App\User::class, 5)->create([
'business_id' => $business->id,
]);
これをあなたのニーズに合わせてください。
ポリモーフィックな「管理者」ユーザーを追加するための私のコードは次のとおりです。
// 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
])
);
});
お役に立てれば。