テーブル「ユーザー」:
|id|name|address|post_code|deleted_at|created_at|
そして、「id」と「deleted_at」の間のどこかに「phone_nr」列を追加したい
Laravel 4.1での移行により可能ですか?
はい。 php artisan migrate:make update_users_table
を使用して新しい移行を作成します。
次に、table
コマンドを次のように使用します(MySQLを使用している場合!):
Schema::table('users', function($table)
{
$table->string('phone_nr')->after('id');
});
移行が完了したら、それを保存し、php artisan migrate
を使用して実行すると、テーブルが更新されます。
ドキュメント: https://laravel.com/docs/4.2/migrations#column-modifiers
ジェームズによる答えはまだ正しいです。ただし、Laravel 5はmake移行構文をわずかに変更しました。
php artisan make:migration add_google_auth_to_users_table --table=users
(私はこの質問にLaravel 4とタグ付けされていることを知っていますが、質問のランクは非常に高いです;))
単一の特定の列の後に複数の列を連続して追加するという@rahulsinghのクエリについて疑問に思っている人のために:
_$table->integer('col1')->after('ref_col');
$table->integer('col2')->after('what');
_
これは、新しいフィールドを逆の順序で書き込むだけで実行できます。たとえば、次のとおりです。
_$table->integer('col4')->after('ref_col');
$table->integer('col3')->after('ref_col');
$table->integer('col2')->after('ref_col');
$table->integer('col1')->after('ref_col');
_
この移行を実行すると、新しいフィールドcol
、_col2
_、...が参照フィールド_ref_col
_の後に意図した順序になっていることがわかります。
残念ながら、既存のフィールドの前にフィールドを追加するbefore()
関数はありません。 (それが存在する場合、上記のステートメントを実際の順序で保持できます。)
cannotまだ存在しないフィールドで連鎖を行います。例:
_$table->integer('col1')->after('ref_col');
$table->integer('col2')->after('col1');
$table->integer('col3')->after('col2');
$table->integer('col4')->after('col3');
_
これは、移行ブループリントが1つのクエリとしてコンパイルされ、1つのクエリとして実行されるためです。したがって、_col2
_の追加に関しては、データベースエンジンは_col1
_が存在しないと文句を言います。
次の移行を作成しました:
php artisan make:migration update_nvm_table
2019_07_10_130441_update_nvm_table.php
そして内部:
public function up()
{
Schema::table('nvm', function (Blueprint $table) {
$table->renameColumn('data1', 'call_owner');
$table->renameColumn('data2', 'transfer_type');
$table->string('transfer_data', 50)->nullable();
});
}
public function down()
{
Schema::table('nvm', function (Blueprint $table) {
$table->dropColumn('transfer_data');
$table->renameColumn('call_owner', 'data1');
$table->renameColumn('transfer_type', 'data2');
});
}
それが参考になることを願っています! :D