2015-09-03 22 views
8

Ho una tabella users e una relazione uno-zero/uno con una tabella businesses (users.user_id => business.user_id). Sulla mia tabella users ho un discriminatore che mi dice se l'utente è di tipo aziendale e quindi ho bisogno di avere i dettagli sulla tabella businesses pure.Come passare argomenti alle fabbriche Laravel?

Desidero creare i miei utenti con la mia fabbrica che attualmente sta funzionando e quindi creare solo dettagli aziendali dove il discriminatore punta a un account aziendale.

Ho tre opzioni nella mia mente:

  1. Creare da parte degli utenti in fabbrica e poi usando '-> ogni()' fare alcuni controlli sulla discriminatore e creare un nuovo utente business utilizzando un fabbrica. Tuttavia non posso passare alla factory aziendale il user_id che l'utente è stato assegnato.
  2. Prima creare gli utenti. Quindi, nella mia seeder aziendale, recupera tutti gli utenti che corrispondono a un discriminatore "aziendale". Quindi per tutti questi utenti viene eseguito uno stabilimento che crea i dettagli aziendali. Ma ancora una volta, dovrei collegare in qualche modo lo user_id dell'utente già creato con la factory aziendale user_id.
  3. Nella mia azienda, creare un nuovo utente e recuperare l'id, creando così il collegamento tra users.user_id e business.user_id. Tuttavia sto usando un generatore casuale per user.user_type quindi anche se ho la tabella businesses piena potrebbe essere per gli utenti che hanno il discriminatore come 'personale'.

C'è un altro modo? Posso passare argomenti dalla mia seminatrice alla fabbrica?

risposta

30

Gli attributi passati alla funzione create verranno passati al callback della definizione del modello come secondo argomento.


Nel tuo caso non c'è nemmeno bisogno di accedere a tali attributi, in quanto faranno automaticamente essere fusi in:

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

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

adattare questo alle vostre esigenze.

+0

Come potrei averlo perso. Ho visto la lezione di Laracast e so che ricordo di aver sistemato le cose da solo. Naturalmente era anche nella documentazione: http://laravel.com/docs/master/testing#model-factories. Molte grazie. – Cristian

+0

@ Il link di Cristian sembra obsoleto ora, per 5.4 vedere https://laravel.com/docs/5.4/database-testing#using-factories e scorrere fino a "Modelli persistenti" – morph

+0

che dire di questo? '' 'php $ student-> assignRole ('studente'); '' ' im using spatie/permission –

Problemi correlati