Artisan ::call (‘migrate’) застрял в переименовании столбца

#php #laravel

#php #laravel

Вопрос:

У меня странное поведение в моем текущем проекте, над которым я работаю. Хотя все мои миграции отлично работают через командную строку с использованием php artisan migrate , они не выполняются через команду Artisan.

Цель состоит в том, чтобы создать новую базу данных и запустить там миграции, чтобы мой код для этой части выглядел так:

  DB::statement("CREATE DATABASE TESTDB");


DB::disconnect('mysql');
Config::set('database.connections.mysql.database', 'TESTDB');
DB::connection('mysql')->reconnect();

Artisan::call('migrate',
    [
        '--database' => 'mysql',
        '--path'     => 'database/migrations'
    ]);
  

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

Сообщение об ошибке

«В таблице нет столбца с именем ‘parent_version_id’

Но столбец все еще там, он просто не переименован.

Переименование строки миграции:

     $table->renameColumn('parent_version_id', 'child_version_id');
  

Если я удалю эту строку, миграция будет запущена (конечно, не будет переименовывать столбец, через который она просто пройдет) и завершится неудачей при следующей миграции переименования.

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

Ответ №1:

По-видимому, исправление заменяло 1 строку кода.

Вместо :

 DB::connection('mysql')->reconnect();
  

Используется:

 DB::purge('mysql');
  

Который, кажется, также удаляет старый кеш, который противоречил доктрине.