Sök…


Kör en Seeder

Du kan lägga till din nya Seeder i klassen DatabaseSeeder.

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

Använd kommandot Artisan för att köra en databas seeder

php artisan db:seed

Detta kör klassen DatabaseSeeder. Du kan också välja att använda alternativet --class= att manuellt ange vilken seeder som ska köras.

* Observera, du kan behöva köra kompositdumpautoload om din Seeder-klass inte kan hittas. Detta händer vanligtvis om du manuellt skapar en seeder-klass istället för att använda hantverkskommandot.

Skapa ett frö

Databasfrön lagras i katalogen / databas / frön. Du kan skapa ett frö med ett hantverkskommando.

php artisan make:seed UserTableSeeder

Alternativt kan du skapa en ny klass som utvidgar Illuminate\Database\Seeder . Klassen måste ha en offentlig funktion som heter run() .

Infoga data med en Seeder

Du kan referera till modeller i en 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')
        ]);

    }
}

Infoga data med en modellfabrik

Du kanske vill använda modellfabriker i dina frön. Detta skapar 3 nya användare.

use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

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

Du kanske också vill definiera specifika fält på sådd som t.ex. ett lösenord. Detta skapar 3 användare med samma lösenord.

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

Sådd med MySQL Dump

Följ tidigare exempel på att skapa ett frö. I det här exemplet används en MySQL Dump för att sätta en tabell i projektdatabasen. Tabellen måste skapas före sådd.

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

Vår $ sql kommer att vara innehållet i våra användare.sql dumpning. Dumpningen bör ha ett INSERT INTO-uttalande. Det är upp till dig där du lagrar dina dumpar. I exemplet ovan lagras det i projektkatalogen \database\seeds . Använda laravels hjälpfunktion database_path() och lägg till katalogen och filnamnet på dumpningen.

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) kommer att köra bilagorna när Seeder har körts. Som i tidigare exempel kan du placera UserTableSeeder i klassen DatabaseSeeder från laravel:

<?php

use Illuminate\Database\Seeder;

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

och kör från CLI i projektkatalog php artisan db:seed . Eller så kan du köra Seeder för en enda klass med php artisan db:seed --class=UsersTableSeeder

Använda faker And ModelFactories för att generera frön

1) GRUNDLÄGGANDE ENKEL VÄG

Databasdrivna applikationer behöver ofta förförd inlägg i systemet för test- och demoändamål.

För att skapa sådana data, skapar du först seeder-klassen

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

För att ringa en för att kunna utföra en seeder-klass måste du ringa den från klassen DatabaseSeeder, helt enkelt genom att lämna namnet på den seeder du vill köra:

använd 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);
    }
}

Glöm inte att köra $ composer dump-autoload efter att du har skapat Seederen, eftersom de inte automatiskt laddas in av kompositören (såvida du inte skapade seeder av hantverkare kommando $ php artisan make:seeder Name )

Nu är du redo att frö genom att köra detta hantverkskommando php artisan db:seed

2) ANVÄNDNING av modellfabriker

Först och främst definierar du en standarduppsättning attribut för varje modell i App/database/factories/ModelFactory.php

Ta en användarmodell som ett exempel, så ser en ModelFactory ut

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

Skapa nu en tabell seeder php artisan make:seeder UsersTableSeeder

Och lägg till detta

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

lägg sedan till detta i DatabaseSeeder

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

Detta kommer att sätta bordet med 100 poster.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow