Zoeken…


Een zaaimachine runnen

U kunt uw nieuwe Seeder toevoegen aan de klasse DatabaseSeeder.

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

Gebruik de opdracht Artisan om een database-seeder uit te voeren

php artisan db:seed

Hiermee wordt de klasse DatabaseSeeder uitgevoerd. U kunt er ook voor kiezen om de optie --class= gebruiken om handmatig aan te geven welke seeder moet worden uitgevoerd.

* Let op, misschien moet u componist dumpautoload uitvoeren als uw Seeder-klasse niet kan worden gevonden. Dit gebeurt meestal als u handmatig een seeder-klasse maakt in plaats van de artisanale opdracht te gebruiken.

Een zaadje maken

Database-zaden worden opgeslagen in de map / database / zaden. Je kunt een seed maken met een Artisan-commando.

php artisan make:seed UserTableSeeder

Als alternatief kunt u een nieuwe klasse maken die de Illuminate\Database\Seeder uitbreidt. De klasse moet een openbare functie met de naam run() .

Gegevens invoegen met een zaaimachine

U kunt verwijzen naar modellen in een seeder.

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')
        ]);

    }
}

Gegevens invoegen met een Model Factory

Misschien wilt u Modelfabrieken in uw zaden gebruiken. Hiermee worden 3 nieuwe gebruikers gemaakt.

use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

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

Misschien wilt u ook specifieke velden in uw seeding definiëren, bijvoorbeeld een wachtwoord. Hiermee worden 3 gebruikers met hetzelfde wachtwoord gemaakt.

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

Zaaien met MySQL Dump

Volg het vorige voorbeeld van het maken van een seed. In dit voorbeeld wordt een MySQL-dump gebruikt om een tabel in de projectdatabase te zaaien. De tabel moet vóór het zaaien worden gemaakt.

<?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);
      }
}

Onze $ sql wordt de inhoud van de dump van onze users.sql. De dump moet een INSERT INTO-instructie hebben. Het is aan jou waar je je dumps opslaat. In het bovenstaande voorbeeld wordt het opgeslagen in de projectmap \database\seeds . Gebruik de helperfunctie database_path() laravel en voeg de map en de bestandsnaam van de dump toe.

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) zal de inserts uitvoeren zodra de Seeder is uitgevoerd. Net als in vorige voorbeelden kunt u de UserTableSeeder in de klasse DatabaseSeeder van laravel plaatsen:

<?php

use Illuminate\Database\Seeder;

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

en voer CLI uit in de projectmap php artisan db:seed . Of u kunt de Seeder voor een enkele klasse uitvoeren met php artisan db:seed --class=UsersTableSeeder

Faker en ModelFactories gebruiken om zaden te genereren

1) BASIS EENVOUDIGE MANIER

Database-gestuurde applicaties hebben vaak gegevens nodig die vooraf in het systeem zijn geplaatst voor test- en demo-doeleinden.

Maak eerst de seeder-klasse om dergelijke gegevens te maken

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

Om een seeder-klasse uit te voeren, moet u deze vanuit de klasse DatabaseSeeder aanroepen, gewoon door de naam van de seeder die u wilt uitvoeren door te geven:

gebruik 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);
    }
}

Vergeet niet om $ composer dump-autoload nadat u de seeder hebt gemaakt, omdat ze niet automatisch door de componist worden automatisch geladen (tenzij u seeder hebt gemaakt met het artisanale commando $ php artisan make:seeder Name )

Nu ben je klaar om te zaaien door dit artisanale commando php artisan db:seed

2) GEBRUIK VAN Modelfabrieken

Allereerst moet u een standaardset kenmerken definiëren voor elk model in de App/database/factories/ModelFactory.php

Een voorbeeld van een gebruikersmodel, zo ziet een modelfabriek eruit

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

Maak nu een tabel seeder php artisan make:seeder UsersTableSeeder

En voeg dit toe

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

voeg dit vervolgens toe aan de DatabaseSeeder

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

Dit zal de tabel met 100 records zaaien.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow