タイトルが言っていることとほとんど同じです。移行の一環として列名を変更する必要があります。
6 に答える
Laravel 3
はい、それは可能ですが、生のクエリでのみ可能です。一部のDBMSは列名の変更をサポートしていないため、一部のDBMSでは失敗するため、このような機能を実装しないことにしました。
DB::raw()
したがって、移行内で生のクエリを活用できることを忘れないでください。そのように列名を変更できます。
Laravel 4
doctrine/dbal
Laravel 4.1では、に依存関係として追加する必要がありますcomposer.json
。
"doctrine/dbal": "2.4.*"
実行すると、メソッドcomposer update
を使用できるようになります。renameColumn
Schema::table('users', function($table)
{
$table->renameColumn('location', 'address');
});
これにより、location
列の名前が次のように変更されますaddress.
renameColumn() メソッドは、Laravel 4.1 ではデフォルトで使用できません。リリース ノートを参照してください。
移行で renameColumn 関数を使用している場合は、 doctrine/dbal 依存関係を composer.json ファイルに追加する必要があります。このパッケージはデフォルトで Laravel に含まれなくなりました。
Laravel 4 の時点で、DB スキーマはを介して列の名前を変更できることに注意してください$table->renameColumn('from', 'to')
。
renameColumn()
Laravel 4の機能が修正されるまで(現在はThere is no column with name
エラーで失敗します)、次のようなものを使用できます。
Schema::table('table_name', function(Blueprint $table) {
$table->string('new_name')->after('some_other_column_name');
});
DB::table('table_name')->update(array('new_name' => DB::raw('old_name')));
Schema::table('table_name', function(Blueprint $table) {
$table->dropColumn('old_name');
});
https://github.com/laravel/laravel/issues/2146によると、renameColumn は削除され、利用可能な修正はありません。
public function renameColumn($oldColumnName, $newColumnName) {
throw new DBALException("Table#**renameColumn() was removed**, because it drops and recreates the column instead. **There is no fix available**, because a schema diff cannot reliably detect if a column was renamed or one column was created and another one dropped.");
}
Laravel 4.1 と doctrine/dbal 2.2 の場合、これは vendor/doctrine/dbal/UPGRADE にあります。