при условии, что у меня есть код, который работает в производственной среде, и из-за этого я не могу изменить тот же файл миграции для добавления новых столбцов, как показано ниже
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->nullable();
$table->string('email')->unique();
$table->string('token_key')->unique()->nullable();
$table->enum('type', ['avatar', 'image', 'video'])->comment(implode(', ', ['avatar', 'image', 'video']));
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
, и после первого выпуска я хотите удалить значение avatar
из столбца с именем type
допустимые значения, поэтому я добавляю новый файл миграции для добавления моего нового столбца, как показано ниже
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ChangeEnumOnUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$sql = sprintf(
"ALTER TABLE %s CHANGE `%s` `%s` ENUM('%s') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '%s'",
'users',
'type',
'type',
implode('\',\'', ['image', 'video']),
implode(',', ['image', 'video'])
);
DB::statement($sql);
}
}
, и используя vendor/bin/phpunit
, я запускаю свой тест
обратите внимание, что в первую очередь будет перенесена база данных, и из-за этого метод тестирования не запускается
И SQLite выдает ошибку, как показано ниже.
Исключение SQLite похоже на
PDOException: SQLSTATE[HY000]: General error: 1 near "CHANGE": syntax error
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1 near "CHANGE": syntax error (SQL: ALTER TABLE users CHANGE `type` `type` ENUM('image','video') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'image,video')