Ricerca…
Osservazioni
Il seeding del database consente di inserire dati, dati di test generali nel database. Di default c'è una classe DatabaseSeeder
sotto database/seeds
.
L'esecuzione di seminatrici può essere eseguita con
php artisan db:seed
O se vuoi solo elaborare una singola classe
php artisan db:seed --class=TestSeederClass
Come per tutti i comandi artisan, è possibile accedere a una vasta gamma di metodi che possono essere trovati nella documentazione API
Inserimento di dati
Esistono diversi modi per inserire i dati:
Utilizzando la facciata DB
public function run()
{
DB::table('users')
->insert([
'name' => 'Taylor',
'age' => 21
]);
}
Tramite l'istanziazione di un modello
public function run()
{
$user = new User;
$user->name = 'Taylor';
$user->save();
}
Utilizzando il metodo di creazione
public function run()
{
User::create([
'name' => 'Taylor',
'age' => 21
]);
}
Utilizzando la fabbrica
public function run()
{
factory(App\User::class, 10)->create();
}
Semina && elimina vecchi dati e resetta l'auto-incremento
public function run()
{
DB::table('users')->delete();
DB::unprepared('ALTER TABLE users AUTO_INCREMENT=1;');
factory(App\User::class, 200)->create();
}
Vedere l'esempio Persistente per ulteriori informazioni sull'inserimento / aggiornamento dei dati.
Chiamando altri seminatori
All'interno della classe DatabaseSeeder
puoi chiamare altri seeder
$this->call(TestSeeder::class)
Questo ti permette di conservare un file dove puoi trovare facilmente i seeder. Tieni presente che è necessario prestare attenzione all'ordine delle chiamate in merito ai vincoli delle chiavi esterne. Non puoi fare riferimento a una tabella che non esiste ancora.
Creare una seminatrice
Per creare seminatrici, puoi usare il comando make:seeder
Artisan. Tutti i seeders generati verranno posizionati nella directory database/seeds
.
$ php artisan make:seeder MoviesTableSeeder
I seeders generati conterranno un metodo: run
. Puoi inserire dati nel tuo database con questo metodo.
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class MoviesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
App\Movie::create([
'name' => 'A New Hope',
'year' => '1977'
]);
App\Movie::create([
'name' => 'The Empire Strikes Back',
'year' => '1980'
]);
}
}
Generalmente vuoi chiamare tutti i tuoi seeder all'interno della classe DatabaseSeeder
.
Una volta che hai finito di scrivere i seeder, usa il comando db:seed
. Questo farà eseguire DatabaseSeeder
s' run
funzione.
$ php artisan db:seed
È anche possibile specificare di eseguire una classe di seminatrice specifica da eseguire singolarmente utilizzando l'opzione --class
.
$ php artisan db:seed --class=UserSeeder
Se si desidera eseguire il rollback e rieseguire tutte le migrazioni, quindi riavviare:
$ php artisan migrate:refresh --seed
Il comando
migrate:refresh --seed
è un collegamento a questi 3 comandi:$ php artisan migrate:reset # rollback all migrations $ php artisan migrate # run migrations $ php artisan db:seed # run seeders
Rianimazione sicura
Potresti voler ri-seminare il tuo database senza influenzare i tuoi semi precedentemente creati. A tale scopo, puoi utilizzare firstOrCreate
nella tua seminatrice:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
Quindi puoi seminare il database:
php artisan db:seed
In seguito, se vuoi aggiungere un altro tipo di dipendente, puoi semplicemente aggiungere quello nuovo nello stesso file:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
EmployeeType::firstOrCreate([
'type' => 'secretary',
]);
E semina nuovamente il tuo database senza problemi:
php artisan db:seed
Notare che nella prima chiamata si sta recuperando il record ma non si fa nulla con esso.