Рубрики
Uncategorized

Заполнение данных Laravel (начальное значение) 6 советов, которыми можно поделиться

Автор оригинала: David Wong.

Статья была переслана из профессионального сообщества разработчиков laravel. Оригинальная ссылка: https://learnku.com/laravel/t…

Пункт 1. Используйте updateorcreate (), чтобы избежать двойного заполнения

Представьте себе этот код заполнения, представьте, что по какой-то причине это заполнение будет запускаться несколько раз:

public function run()
{
    $items = [
        ['id' => 1, 'title' => 'Administrator'],
        ['id' => 2, 'title' => 'Simple user'],
    ];

    foreach ($items as $item) {
        Role::create($item);
    }
}

Вторая попытка выполнить заполнение может завершиться неудачей из-за конфликта идентификаторов. В других случаях, если вы не укажете идентификатор, вы можете заполнить много данных в таблице и повторить ввод. Чтобы избежать этого, попробуйте следующее:

foreach ($items as $item) {
    Role::updateOrCreate(['id' => $item['id']], $item);
}

Пункт 2. Запускайте только один класс сеялки

Некоторое время назад я был удивлен, как много людей не знали, что их казнят php artisan db:seed Команда для указания класса заполнения.

php artisan db:seed

Эта команда начнется с DatabaseSeeder.php Все классы, перечисленные в файле.

Но вы можете ограничить запуск точным классом наполнителя:

php artisan db:seed --class=UsersTableSeeder

Пункт 3. Выполните начальный класс из файла миграции

Обычно вам нужно создать новую таблицу данных и немедленно заполнить некоторые данные. Но вы не можете сразу выполнить “база данных artisan: начальное значение” на этапе создания, особенно если у вас есть программа автоматического развертывания, которая включает только команду “перенос ремесленника”.

Хитрость заключается в том, чтобы запустить конкретный файл народонаселения из файла миграции.

public function up()
{
    Schema::create('themes', function (Blueprint $table) {
        $table->increments('id');
        $table->text('name');
    });

    Artisan::call('db:seed', [
        '--class' => ThemesTableSeeder::class
    ]);
}

Пункт 4. Связанный заводской класс сеялки: используйте родительский заводской класс

Если вы создаете заводские классы для заполнения данных, как вы справляетесь с отношениями между двумя моделями? Например, нужно ли вам заполнить 10 компаний и 10 контактных данных этих компаний?

Ваш database/factories/CompanyFactory.php Все будет так:

$factory->define(App\Contact::class, function (Faker\Generator $faker) {
    return [
        'company_id' => factory('App\Company')->create()->id,
        'first_name' => $faker->firstName(),
        'last_name' => $faker->lastName,
        'phone1' => $faker->phoneNumber,
        'phone2' => $faker->phoneNumber,
        'email' => $faker->email,
        'skype' => $faker->word,
        'address' => $faker->address,
    ];
});

Ты узнал, каково это? идентификатор компании Ну и что? Используйте другую фабрику напрямую.

Пункт 5. База данных для локальной и производственной среды

Иногда вам нужно только заполнить некоторые данные в локальной среде, но не в производственной среде. Или используйте разные файлы заполнения для заполнения разных сред.

Я не уверен, что это самый элегантный способ справиться с этим, но именно так я обычно организовывал различные классы наполнителей в своей локальной и производственной среде.

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        if (app()->environment() == 'production') {
            $this->call(ThemesTableSeeder::class);
            $this->call(LanguagesTableSeeder::class);
        } else {
            $this->call(UsersTableSeeder::class);
            $this->call(ModulesTableSeeder::class);
            $this->call(ThemesTableSeeder::class);
            $this->call(LanguagesTableSeeder::class);
        }
    }
}

Пункт 6. Используйте начальное значение для создания класса населения на основе базы данных

Последним пунктом можно назвать инструмент, которым я пользовался много времени, называемый генератором iseed.

После завершения установки вы можете выполнить следующую команду:

$ php artisan iseed users --force

Это будет в вашем каталоге семена Создать в каталоге UsersTableSeeder.php Документы, --Параметр принудительно используется для принудительной перезаписи любого существующего класса заполнения.

Пункт 7. Запуск заполнения данных в производственной среде

Вот в чем главное. Наконец, давайте поговорим о небольшом здравом смысле при создании класса наполнителя. В вашем локальном/промежуточном Вы можете запустить его несколько раз в локальной среде “миграция ремесленников:свежие семена” Нет риска, что какие-либо существенные данные будут потеряны, но производство Вы можете работать только в производственной среде “база данных artisan:seed” Однажды А потом забудь об этом. Если вы хотите заполнить производственную среду дополнительными данными, поместите их в файл миграции, как описано в пункте 3.