Как создать сценарии семян в Laravel - PullRequest
2 голосов
/ 25 сентября 2019

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

При написании тестов вы также можете использовать Faker et al для создания временных наборов данных.

Обе эти функции великолепны и исключительно соответствуют цели.

Иногда, однако, нам необходимо запускать ручные тесты веб-приложений Laravel, которые состоят из десятков таблиц и сотен или тысяч строк данных.(или даже сотни тысяч строк).Например, если мы хотим загрузить тестовое веб-приложение, нам нужно сгенерировать все эти данные (а не использовать фактические производственные данные).

Я хотел бы изменить команду artisan migrate --seed, включив в нее --scenario=loadtesting, чтобы сообщить Laravel, какие начальные файлы использовать или иметь возможность установить флаг внутри начальных файлов, который говорит if ( 'loadtesting' == $scenario ) { $rows = 1000000; }.

Я посмотрел на класс Seeder.php внутри папки Illuminate (ну,вложенная папка Illuminate), но я не вижу возможности прервать процесс создания начального числа.

Мне интересно, может ли кто-нибудь подробно описать шаги, необходимые для реализации вышеуказанной функции, без перезаписи файлов Laravel (что-нибудь у продавца, если быть точным).Я подозреваю, что Функции ORM компании Faker могут сыграть ключевую роль в любом рекомендованном решении.

Заранее спасибо.

1 Ответ

1 голос
/ 25 сентября 2019

Я могу рассказать вам, как я делаю это иногда.Флаг в .env и config для указания, какие классы сеялки вызывать.

APP_DB_TESTING = 'scenario1';

Затем в сеялке

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

        if (config('app.scenario') === 'scenario1')
        {
            $this->call(CategoriesTableSeeder::class);
            $this->call(TagsTableSeeder::class);
            $this->call(ArticlesTableSeeder::class);
        }

    }

или вы можете создавать собственные artisan команды, которые запускаютразные сеялки.Например, создайте пользовательскую команду с именем LoadArticles и добавьте:

public function handle()
{
    DB::table('articles')->truncate();
    $this->call('db:seed', ['--class' => 'ArticlesTableSeeder']);
}

, которую затем можно вызывать для различных ситуаций тестирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...