web-dev-qa-db-ja.com

特定の他の列の前後にSQLテーブル列を追加する-Laravel 4.1の移行により

テーブル「ユーザー」:

|id|name|address|post_code|deleted_at|created_at|

そして、「id」と「deleted_at」の間のどこかに「phone_nr」列を追加したい

Laravel 4.1での移行により可能ですか?

35
Lajdák Marek

はい。 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

111
James Binford

ジェームズによる答えはまだ正しいです。ただし、Laravel 5はmake移行構文をわずかに変更しました。

php artisan make:migration add_google_auth_to_users_table --table=users

(私はこの質問にLaravel 4とタグ付けされていることを知っていますが、質問のランクは非常に高いです;))

11
Nick

単一の特定の列の後に複数の列を連続して追加するという@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_が存在しないと文句を言います。

0
Adambean

次の移行を作成しました:

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

0
Mexidense