In Laravel, il seeding del database viene generalmente eseguito tramite le fabbriche del modello. Così si definisce un progetto per il vostro modello utilizzando dati Faker, e dire quante istanze è necessario:Laravel - Relazioni di semina
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt(str_random(10)),
'remember_token' => str_random(10),
];
});
$user = factory(App\User::class, 50)->create();
Tuttavia, diciamo il vostro modello User ha un rapporto hasMany
con molti altri modelli, come un modello Post
ad esempio:
Post:
id
name
body
user_id
Quindi, in questa situazione, si vuole seminare il vostro tavolo messaggi con effettivi gli utenti che sono stati seminati nella tabella utenti. Questo non sembra essere esplicitamente discusso, ma ho trovato il seguente nella documentazione laravel:
$users = factory(App\User::class, 3)
->create()
->each(function($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
Quindi nel tuo fabbrica d'uso, si crea un numero X di messaggi per ogni utente che si crea. Tuttavia, in una grande applicazione in cui forse 50 - 75 modelli condividono relazioni con il modello utente, la vostra seminatrice di utenti finirebbe fondamentalmente per seminare l'intero database con tutte le sue relazioni.
La mia domanda è: è questo il modo migliore per gestire questo? L'unica altra cosa che mi viene in mente è Seme degli utenti prima (senza seminare alcuna relazione), quindi estrarre gli utenti casuali dal DB in base alle esigenze mentre si stanno seminando altri modelli. Tuttavia, nei casi in cui devono essere unici, è necessario tenere traccia di quali utenti sono stati utilizzati. Inoltre, sembra che questo aggiunga un sacco di query-bulk in più al processo di seeding.
Grazie per la risposta. Ho provato cose del genere. Tuttavia, se voglio usare lo stesso insieme di utenti per, diciamo, altri 20 modelli, sento che i miei seminatori si confondono abbastanza rapidamente. Essenzialmente, tutta la mia logica di seeding finisce in un file, perché un 'utente' è associato a tanti altri modelli. Ma forse non c'è un modo migliore – djt