我正在尝试修改当前的表格,可以在我的迁移文件中使用SQL查询来完成这个过程,如下:
<?php
public function up()
{
Schema::table('xyz', function (Blueprint $table) {
DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_needed funding_needed decimal(10, 2) NOT NULL DEFAULT 0.00 ');
DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_received funding_received decimal(10, 2) NOT NULL DEFAULT 0.00 ');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('xyz', function (Blueprint $table) {
DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_needed funding_needed varchar(191) NOT NULL ');
DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_received funding_received varchar(191) NOT NULL DEFAULT 0');
});
}
但如果我按这种方式做,就会出现错误:
<?php
public function up()
{
Schema::table('xyz', function (Blueprint $table) {
$table->decimal('funding_needed', 10, 2)->nullable(false)->default(0.00)->change();
$table->decimal('funding_received', 10, 2)->nullable(false)->default(0.00)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('xyz', function (Blueprint $table) {
$table->string('funding_needed', 191)->nullable(false)->default(false)->change();
$table->string('funding_received', 191)->nullable(false)->default(0)->change();
});
}
错误:
语法错误或访问违规: 1064 您的SQL语法中有一个错误; 请查看对应于您的MySQL服务器版本的手册,以了解正确使用的语法near 'CHARACTER SET utf8mb4 DEFAULT'0' NOT NULL COLLATE
utf8mb4_unicode_ci
, CHANGE'第1行(SQL: ALTER TABLE xyz CHANGE funding_needed funding_needed NUMERIC(10, 2) CHARACTER SET utf8mb4 DEFAULT'0' NOT NULL COLLATEutf8mb4_unicode_ci
, CHANGE funding_received funding_received NUMERIC(10, 2) CHARACTER SET utf8mb4 DEFAULT'0' NOT NULL COLLATEutf8mb4_unicode_ci
)
我想采用第二种方法,因为我正在生产环境中运行此操作。 我不想修改生产迁移以匹配我的生产数据库。
nullable(false)
并仅保留默认值,它仍然无法正确运行。 - daugaard47$table->decimal('funding_needed', 10, 2)->nullable(false)->default("0.00")->change();
。 - Erubiel