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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow