2015-09-03 2 views
8

У меня есть таблица users и отношение один к нулю/одно с таблицей businesses (users.user_id => business.user_id). На моей таблице users у меня есть дискриминатор, который говорит мне, является ли пользователь типом бизнеса, и поэтому мне нужно иметь детали и в таблице businesses.Как передать аргументы фабрикам Laravel?

Я хочу создать своих пользователей с моей фабрикой, которая в настоящее время работает, а затем создавать только бизнес-данные, где дискриминатор указывает на бизнес-аккаунт.

У меня есть три варианта, на мой взгляд:

  1. Создание фабрики пользователей, а затем с помощью «-> каждый()» сделать некоторые проверки на дискриминатор и создать нового пользователя бизнес, используя фабрику. Однако я не могу перейти к бизнес-заводу user_id, который был назначен пользователю.
  2. Сначала создайте пользователей. Затем в моей сеялке «Бизнес» выберите всех пользователей, которые соответствуют «бизнес-дискриминатору». Затем для всех этих пользователей запустите фабрику, которая создает бизнес-данные. Но опять же, мне нужно было бы как-то связать user_id уже созданного пользователя с бизнес-заводом user_id.
  3. На моей бизнес-заводе создайте нового пользователя и извлеките идентификатор, создав таким образом ссылку между users.user_id и business.user_id. Однако я использую случайный генератор для user.user_type, поэтому даже если у меня есть заполненная таблица businesses, это может быть для пользователей, у которых дискриминатор «персональный».

Есть ли другой способ? Могу ли я передать аргументы из моего Seeder на завод?

ответ

30

Атрибуты, которые вы передаете функции create, будут переданы в ваш обратный вызов определения модели в качестве второго аргумента.


В вашем случае вам даже не нужно, чтобы получить доступ на эти атрибуты, так как они будут автоматически объединены в:

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

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

Адаптировать это к вашим потребностям.

+0

Как я мог пропустить это. Я наблюдал за уроком Ларакаста, и я знаю, что помню об этом. Конечно, это было в документации: http://laravel.com/docs/master/testing#model-factories. Большое спасибо. – Cristian

+0

@ Ссылка Cristian выглядит устаревшей теперь, для 5.4 см. Https://laravel.com/docs/5.4/database-testing#using-factories и прокрутите вниз до «Сохраняющиеся модели» – morph

+0

, как насчет этого? '' 'php $ student-> assignRole ('student'); '' ' im используя пространство/разрешение –

Смежные вопросы