それはあなたがフィールドNULL可能日時列の名前を変更しようとすると、あなたが移行を実行する場合は、エラーになります場合mariadb 10.2.7での互換性に影響する変更がある表示されます。Laravel Migrationはnullableフィールドの回避策の名前を変更しますか?
[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');
});
}
}
この作業を取得するための回避策があります:
は、列の名前を変更するために、第2の移行を作成しますか?
教義/ DBAL issueによると:
デフォルト値として表現を可能にし、それらをリテラルから を区別するために、Mariadbは今 information_schema.columnテーブルのデフォルト値を引用しています。この変更により、多くの は(Oracle-)Mysql/MariaDBプラットフォーム間の非互換性をもたらします。
代わりMariaDBに特異的SchemaManagerを作成する、このPで撮影溶液 /Rが現在 MySQLSchemaManager(:getMariaDb1027ColumnDefault()メソッド)に導入された変化をマッピングすることです。
MariaDB 10.2.7からは、情報スキーマの変更が含まれています:(columのデフォルトはNULL可能ではない で、デフォルトはありません場合は例外:NULLは INFORMATION_SCHEMAに保存されます)
NULLは現在 'NULL' として引用され、EDITを:例外を参照してください https://jira.mariadb.org/browse/MDEV-14053文字列の既定値は です(文字列 'NULL'を保存するには、 'NULL'として既定値を設定します)。エスケープ: "'"は情報スキーマの "' '"に自動的に変更されます。 モデル(スキーマ差分)の "'"を使用して手動でデフォルト値をエスケープしない限り、 は影響を受けません。また、ポイント5を参照してください。デフォルトのリテラル値 は、自動CURRENT_TIMESTAMP、 CURRENT_DATE、CURRENT_TIMEのサポートをもたらすために引用符で囲まなければなりません。 'current_timestamp()'、 'currdate()'、 'currtime()'。スキーマ diffを防止するために、元の値にマップされます。
$ table-> renameColumn( 'dueDate'、 'due_date') - > nullable() 'を試したことがありますか? –
カラムをnullにできないようにしようとしましたが、名前を変更してから再びヌルにすることができましたか? '$ table-> nullable(false) - > change()' –