Ricerca…


Esecuzione di una seminatrice

Puoi aggiungere la tua nuova seminatrice alla classe DatabaseSeeder.

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }

Per eseguire una seminatrice di database, utilizzare il comando Artisan

php artisan db:seed

Questo eseguirà la classe DatabaseSeeder. Puoi anche scegliere di usare l'opzione --class= per specificare manualmente quale seminatrice eseguire.

* Nota, potrebbe essere necessario eseguire dumpautoload di composer se non è possibile trovare la classe Seeder. Ciò accade in genere se si crea manualmente una classe seminatrice invece di utilizzare il comando artisan.

Creare un seme

I semi del database sono memorizzati nella directory / database / semi. Puoi creare un seme usando un comando Artisan.

php artisan make:seed UserTableSeeder

In alternativa puoi creare una nuova classe che estende Illuminate\Database\Seeder . La classe deve avere una funzione pubblica chiamata run() .

Inserimento di dati utilizzando una seminatrice

Puoi fare riferimento a modelli in una seminatrice.

use DB;
use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

    public function run(){
        # Remove all existing entrie
        DB::table('users')->delete() ;
        User::create([
            'name' => 'Admin',
            'email' => '[email protected]',
            'password' => Hash::make('password')
        ]);

    }
}

Inserimento di dati con una fabbrica modello

Potresti usare le Fabbriche di modelli nei tuoi semi. Questo creerà 3 nuovi utenti.

use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

    public function run(){
        factory(User::class)->times(3)->create();    
    }
}

Ad esempio, potresti anche voler definire campi specifici sul tuo seeding come una password. Questo creerà 3 utenti con la stessa password.

factory(User::class)->times(3)->create(['password' => '123456']);    

Semina con MySQL Dump

Segui l'esempio precedente di creazione di un seme. In questo esempio viene utilizzato un dump MySQL per eseguire il seeding di una tabella nel database del progetto. La tabella deve essere creata prima della semina.

<?php

use Illuminate\Database\Seeder;

class UserTableSeeder extends Seeder
{

    /**
     * Run the database seeds.
     *
     * @return void
     */
     public function run()
     {
         $sql = file_get_contents(database_path() . '/seeds/users.sql');
    
         DB::statement($sql);
      }
}

Il nostro $ sql sarà il contenuto del nostro dump di users.sql. Il dump dovrebbe avere un'istruzione INSERT INTO. Spetterà a te dove conservi le discariche. Nell'esempio precedente, è memorizzato nella directory di progetto \database\seeds . Utilizzando la funzione helper di database_path() di laravel, database_path() e aggiungendo la directory e il nome del file del dump.

INSERT INTO `users` (`id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES
(1, 'Jane', '[email protected]', 'superSecret', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00'),
(2, 'John', '[email protected]', 'sup3rS3cr3t', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00');

DB::statement($sql) eseguirà gli inserti una volta eseguita la Seeder. Come negli esempi precedenti, puoi inserire UserTableSeeder nella classe DatabaseSeeder fornita da laravel:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }
}

ed eseguire dalla CLI nella directory di progetto php artisan db:seed . Oppure puoi eseguire la Seminatrice per una singola classe usando php artisan db:seed --class=UsersTableSeeder

Usare faker e ModelFactories per generare semi

1) MODO SEMPLICE DI BASE

Le applicazioni basate su database spesso richiedono dati pre-seminati nel sistema per scopi di test e dimostrativi.

Per rendere tali dati, prima creare la classe seminatrice

ProductTableSeeder

use Faker\Factory as Faker;
use App\Product;

class ProductTableSeeder extends DatabaseSeeder {

public function run()
{
    $faker = $this->getFaker();

    for ($i = 0; $i < 10; $i++)
    {
        $name =         $faker->word;
        $image =        $faker->imageUrl;
       
        Modelname::create([
            'name' => $name,
            'image' => $image,
        ]);
      }
    }
 }

Per chiamare un essere in grado di eseguire una classe di seminatrice, è necessario chiamarlo dalla classe DatabaseSeeder, semplicemente passando il nome della seminatrice che si desidera eseguire:

usa Illuminate \ Database \ Seeder;

class DatabaseSeeder extends Seeder {

    protected $faker;

    public function getFaker() {
        if (empty($this->faker)) {
            $faker = Faker\Factory::create();
            $faker->addProvider(new Faker\Provider\Base($faker));
            $faker->addProvider(new Faker\Provider\Lorem($faker));
        }
        return $this->faker = $faker;
    }
    public function run() {
        $this->call(ProductTableSeeder::class);
    }
}

Non dimenticare di eseguire $ composer dump-autoload dopo aver creato la Seeder, dal momento che non vengono automaticamente caricati automaticamente dal compositore (a meno che tu non abbia creato la seminatrice tramite il comando artisan $ php artisan make:seeder Name )

Ora sei pronto per seminare eseguendo questo comando php artisan db:seed

2) UTILIZZO DELLE FABBRICHE DEL MODELLO

Prima di tutto devi definire un set predefinito di attributi per ciascun modello in App/database/factories/ModelFactory.php

Assunzione di un modello Utente come esempio, Ecco come appare ModelFactory

$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),
    ];
});

Ora crea una seminatrice da tavolo php artisan make:seeder UsersTableSeeder

E aggiungi questo

public function run()
{
    factory(App\User::class, 100)->create()
}

quindi aggiungere questo al DatabaseSeeder

public function run()
{
    $this->call(UsersTableSeeder::class);
}

Questo semina la tabella con 100 record.



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