Как сделать резервную копию таблицы БД перед усечением в файле миграции Laravel? - PullRequest
1 голос
/ 16 июня 2020

Вопрос имеет сходство с this .

Хотя этот вопрос кажется нерешенным, в разделе комментариев указывается:

Настоящая обратимая миграция приведет к резервная копия посетителей таблицы на up () перед усечением, а затем копирование резервной копии в исходную на down ().

Не удалось найти никакого рабочего решения для выполнения вышеуказанных шагов.

Как снять дамп таблицы БД перед усечением? Нашел несколько примеров, показывающих, как импортировать из файла .sql, но здесь это бесполезно без предварительного экспорта данных.

Код будет выглядеть примерно так:

class TruncateApiKeysTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // take backup of current api_keys
        // run the truncate
        if (Schema::hasTable('api_keys')) {
            Schema::table('api_keys', function(Blueprint $table) {
                $table->truncate();
            });
        }
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
       // import data from the sql dump file
       // insert data into api_keys to revert changes
    }

1 Ответ

1 голос
/ 17 июня 2020

Решение 1: сохранить существующую запись в качестве сидера перед усечением. Используя инструмент db to seeder, такой как https://github.com/orangehill/iseed, вы можете вызвать php artisan iseed my_table в CLI или Artisan::call('iseed my_table'); в php.

Решение 2: создать резервная копия mysql db, затем сохраните таблицу перед усечением. Это означает, что у вас будет 02 mysql соединение:

  • current_db
  • backup_db

Вы можете легко обрабатывать несколько БД с помощью laravel.

...