它似乎有在MariaDB的10.2.7重大更改,如果你試圖重命名爲空的領域datetime列,如果你運行遷移,你會得到一個錯誤:Laravel遷移重命名可空字段解決方法?
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'due_date' (SQL: ALTER TABLE test
CHANGE dueDate due_date DATETIME DEFAULT 'NULL')
創建遷移:
class CreateTestTable extends Migration
{
public function up()
{
Schema::create('test', function (Blueprint $table) {
$table->increments('id');
$table->dateTime('dueDate')->nullable();
});
}
}
創建第二個遷移,重命名列:
class RenameColumn extends Migration
{
public function up()
{
Schema::table('test', function(Blueprint $table) {
$table->renameColumn('dueDate', 'due_date');
});
}
}
是否有變通方法來得到這個工作?
根據教義/ DBAL issue:
爲了讓表達式爲默認值,從字面區分 ,MariaDB的報價目前在 information_schema.column表中的默認值。 (Oracle-)Mysql/MariaDB平臺之間的這種變化會帶來很多 不兼容。
相反創建MariaDB的特定SchemaManager的,在該p採取的溶液 /R是映射在當前 MySQLSchemaManager引入的變化(方法:getMariaDb1027ColumnDefault())。
從MariaDB的10.2.7,信息模式的變化包括:
NULL現在引述「NULL」(異常時科拉姆默認是不 可空,並沒有默認提供:NULL保存在 INFORMATION_SCHEMA),EDIT :查看例外 https://jira.mariadb.org/browse/MDEV-14053字符串默認值被引用 (要保存字符串'NULL',請將默認值設置爲'NULL'')。轉義: 「'」在信息模式中默默地變爲「''」。這應該是 不會產生影響,除非您在 模型(模式差異)中用「'」手動轉義默認值。默認文字值 必須被引用,它支持自動CURRENT_TIMESTAMP, CURRENT_DATE,CURRENT_TIME默認值默認更改爲 'current_timestamp()','currdate()','currtime()'。爲了防止模式 差異,它們被映射回它們的原始值。
你嘗試過'$ table-> renameColumn('dueDate','due_date') - > nullable()'? –
您是否嘗試將列設爲非空,重命名,然後再次將其設爲空? '$表 - >可空(假) - >更改()' –