无法更改 Laravel table 列类型

Can't change Laravel table column type

我无法执行 migrate:fresh。

命令在更改 table 列时失败:

$table->string('language_id')->default('')->length(255);

至:

$table->integer('language_id')->unsigned()->default(1)->change();


我遇到的错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CHARACTER SET utf8mb4 DEFAULT 1 NOT N ULL COLLATE utf8mb4_unicode_ci' at line 1 (SQL: ALTER TABLE users CHANGE language_id language_id INT UNSIGNED CHA RACTER SET utf8mb4 DEFAULT 1 NOT NULL COLLATE utf8mb4_unicode_ci)

任何help/hints将不胜感激。

取决于 Laravel 文档:

Note: Before changing a column, be sure to add the doctrine/dbal dependency to your composer.json file.

试试这个

Schema::table('your_table_name', function (Blueprint $table) {
        $table->unsignedInteger('language_id')->default(1);
});

如果标准溶液不起作用。你可以试试这个:

public function up()
{
    DB::statement('ALTER TABLE mytable MODIFY mycolumn  INTEGER;');
}

public function down()
{
    DB::statement('ALTER TABLE mytable MODIFY mycolumn STRING;');
}

需要doctrine/dbal

composer require doctrine/dbal

写一个新的迁移并写这个

 public function up()
    {
        Schema::table('table_name', function (Blueprint $table) {
            $table->integer('language_id')->change();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('your_table_name', function (Blueprint $table) {
            $table->dropColumn('language_id');
        });
    }