Поиск…


Запуск сеялки

Вы можете добавить новый Seeder в класс DatabaseSeeder.

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

Чтобы запустить сеялку базы данных, используйте команду Artisan

php artisan db:seed

Это запустит класс DatabaseSeeder. Вы также можете использовать параметр --class= чтобы вручную указать, какую сеялку следует запустить.

* Примечание. Возможно, вам понадобится запустить компоновщик dumpautoload, если ваш класс Seeder не найден. Обычно это происходит, если вы вручную создаете класс сеялки вместо использования команды artisan.

Создание семян

Семена базы данных хранятся в каталоге / database / seed. Вы можете создать семя, используя команду Artisan.

php artisan make:seed UserTableSeeder

В качестве альтернативы вы можете создать новый класс, который расширяет Illuminate\Database\Seeder . Класс должен иметь общедоступную функцию с именем run() .

Вставка данных с использованием сеялки

Вы можете ссылаться на модели в сеялке.

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

    }
}

Вставка данных с помощью Factory Factory

Вы можете захотеть использовать фабрики моделей в своих семенах. Это создаст 3 новых пользователя.

use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

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

Вы также можете, например, указать определенные поля в своем посеве, например, пароль. Это создаст 3 пользователя с одинаковым паролем.

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

Посещение MySQL Dump

Следуйте предыдущему примеру создания семени. В этом примере используется MySQL Dump для разбивки таблицы в базе данных проекта. Перед посевом должна быть создана таблица.

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

Наш $ sql будет содержимым нашего дампа users.sql. Свалка должна иметь инструкцию INSERT INTO. Это зависит от вас, где вы храните свои свалки. В приведенном выше примере он сохраняется в каталоге проекта \database\seeds . Используя вспомогательную функцию laravel database_path() и добавьте каталог и имя файла дампа.

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) будет выполнять вставки после запуска Seeder. Как и в предыдущих примерах, вы можете поместить UserTableSeeder в класс DatabaseSeeder предоставляемый laravel:

<?php

use Illuminate\Database\Seeder;

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

и запустить из CLI в каталоге проекта php artisan db:seed . Или вы можете запустить Seeder для одного класса, используя php artisan db:seed --class=UsersTableSeeder

Использование faker и ModelFactories для генерации семян

1) ОСНОВНОЙ ПРОСТОЙ ПУТЬ

Приложениям, управляемым базами данных, часто требуются данные, предварительно загруженные в систему для тестирования и демонстрации.

Чтобы сделать такие данные, сначала создайте класс сеялки

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

Чтобы вызвать возможность выполнения класса сеялки, вы вызываете его из класса DatabaseSeeder, просто передав имя сеялки, которую вы хотите запустить:

используйте 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);
    }
}

Не забудьте запустить $ composer dump-autoload после создания Seeder, поскольку они не автоматически автоматически загружаются композитором (если только вы не создали сеялку командой artisan $ php artisan make:seeder Name )

Теперь вы готовы к семени, запустив эту команду php artisan db:seed

2) ИСПОЛЬЗОВАНИЕ ЗАВОДОВ

Прежде всего, вы должны определить набор атрибутов по умолчанию для каждой модели в App/database/factories/ModelFactory.php

Взятие модели пользователя в качестве примера. Как выглядит 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),
    ];
});

Теперь создайте php artisan make:seeder UsersTableSeeder для таблицы php artisan make:seeder UsersTableSeeder

И добавьте это

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

затем добавьте это в DatabaseSeeder

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

Это заселоет таблицу со 100 записями.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow