Szukaj…


Prowadzenie siewnika

Możesz dodać nowego Seedera do klasy DatabaseSeeder.

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

Aby uruchomić siewnik bazy danych, użyj polecenia Rzemieślnik

php artisan db:seed

Spowoduje to uruchomienie klasy DatabaseSeeder. Możesz także wybrać opcję --class= , aby ręcznie określić, który siewnik ma być uruchomiony.

* Uwaga: może być konieczne uruchomienie dumpautoload kompozytora, jeśli nie można znaleźć klasy Seeder. Zwykle dzieje się tak, jeśli ręcznie utworzysz klasę siewnika zamiast używać polecenia rzemieślnika.

Tworzenie nasienia

Ziarna bazy danych są przechowywane w katalogu / database / seeds. Możesz stworzyć ziarno za pomocą polecenia Rzemieślnika.

php artisan make:seed UserTableSeeder

Alternatywnie możesz utworzyć nową klasę, która rozszerza Illuminate\Database\Seeder . Klasa musi mieć funkcję publiczną o nazwie run() .

Wstawianie danych za pomocą Seedera

Możesz odwoływać się do modeli w siewniku.

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

    }
}

Wstawianie danych za pomocą fabryki modeli

Możesz użyć Fabryki Modelów w swoich nasionach. Spowoduje to utworzenie 3 nowych użytkowników.

use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

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

Możesz także na przykład zdefiniować określone pola w twoim seedingu jak hasło. Spowoduje to utworzenie 3 użytkowników z tym samym hasłem.

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

Wysiew z MySQL Dump

Postępuj zgodnie z poprzednim przykładem tworzenia zarodka. W tym przykładzie użyto zrzutu MySQL do zaszczepienia tabeli w bazie danych projektu. Tabela musi zostać utworzona przed zaszczepieniem.

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

Nasze $ sql będzie zawartością zrzutu zrzutu users.sql. Zrzut powinien mieć instrukcję INSERT INTO. To od Ciebie zależy, gdzie będziesz przechowywać swoje zrzuty. W powyższym przykładzie jest on przechowywany w katalogu projektu \database\seeds . Korzystanie z funkcji pomocniczej laravel database_path() i dołączanie nazwy katalogu i pliku zrzutu.

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) wykona wstawki po uruchomieniu Seedera. Podobnie jak w poprzednich przykładach, możesz umieścić UserTableSeeder w klasie DatabaseSeeder dostarczonej przez laravel:

<?php

use Illuminate\Database\Seeder;

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

i uruchom z CLI w katalogu projektu php artisan db:seed . Lub możesz uruchomić Seedera dla pojedynczej klasy, używając php artisan db:seed --class=UsersTableSeeder

Używanie faker i ModelFactories do generowania nasion

1) PODSTAWOWY PROSTY SPOSÓB

Aplikacje oparte na bazie danych często potrzebują danych wstępnie zaszczepionych w systemie do celów testowych i demonstracyjnych.

Aby utworzyć takie dane, najpierw utwórz klasę siewnika

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

Aby wywołać możliwość wykonania klasy seeder, wywołujesz ją z klasy DatabaseSeeder, po prostu przekazując nazwę sedera, który chcesz uruchomić:

użyj 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);
    }
}

Nie zapomnij uruchomić $ composer dump-autoload po utworzeniu Seedera, ponieważ nie są one automatycznie ładowane automatycznie przez kompozytora (chyba że utworzyłeś siewnik za pomocą polecenia rzemieślnika $ php artisan make:seeder Name )

Teraz jesteś gotowy do uruchomienia, uruchamiając polecenie php artisan db:seed

2) KORZYSTANIE Z Fabryk Modelowych

Przede wszystkim należy zdefiniować domyślny zestaw atrybutów dla każdego modelu w App/database/factories/ModelFactory.php

Biorąc model użytkownika za przykład, tak wygląda 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),
    ];
});

Teraz stwórz siewnik stołowy php artisan make:seeder UsersTableSeeder

I dodaj to

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

następnie dodaj to do DatabaseSeeder

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

To zapełni tabelę 100 rekordami.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow