Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Семя Laravel после миграции

Автор вопроса: imperium2335Ответов: 3

Есть ли что-то, что я могу добавить в свои миграции, чтобы автоматически заполнить таблицу тестовыми данными после завершения миграции?

Или вам нужно раздавать отдельно?

phpmigrationlaravellaravel-5laravel-4

Ответы

Ответ 1 · рейтинг 73 · lukasgeiter

Вы можете вызвать migrate:refresh с параметром --seed для автоматического заполнения после завершения миграции:

php artisan migrate:refresh --seed

Это приведет к откату и повторному запуску всех ваших миграций и последующему запуску всех сидов.


В качестве небольшого дополнения вы также можете всегда использовать Artisan::call() для запуска команды artisan из приложения:

Artisan::call('db:seed');

or

Artisan::call('db:seed', array('--class' => 'YourSeederClass'));

если вам нужен конкретный класс сеялки.

Ответ 2 · рейтинг 42 · Manpreet

Если вы не хотите удалять существующие данные и хотите заполнить их после переноса

ответ lukasgeiter верен для тестовых данных, но выполняется следующая команда artisan

php artisan migrate:refresh --seed

in production обновит вашу базу данных, удалив все данные, введенные или обновленные из внешнего интерфейса.

Если вы хотите заполнить свою базу данных во время миграции (например, развертывание обновления для вашего приложения с сохранением существующих данных), например, добавить новую таблицу стран вместе с исходными данными, вы можете сделать следующее:

Создайте пример сеялки базы данных YourSeeder.php в базе данных/семянах и миграцию таблицы местоположений.

class YourTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tablename', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name',1000);
            $table->timestamps();
            $table->softDeletes();
        });

        $seeder = new YourTableSeeder();
        $seeder->run();
    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::dropIfExists('tablename');
    }
}

Запустите composer dump-autoload, если есть ошибка php class not found для класса YourTableSeeder.

Ответ 3 · рейтинг 6 · Jason McCreary

Хотя ответ Лукасгейтера верен, я хотел бы уточнить ваш второй вопрос.

Или нужно сеять отдельно?

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

Кроме того, если вы хотите заполнить данные в рамках тестирования, вы можете вызвать $this->seed() из своего тестового примера Laravel.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы