#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');
Который, кажется, также удаляет старый кеш, который противоречил доктрине.