web-dev-qa-db-ja.com

移行で既存のテーブルに新しい列を追加する

Laravelフレームワークを使用して既存のデータベーステーブルに新しい列を追加する方法がわかりません。

私はを使用して移行ファイルを編集しようとしました...

<?php

public function up()
{
    Schema::create('users', function ($table) {
        $table->integer("paid");
    });
}

ターミナルでは、php artisan migrate:installmigrateを実行します。

新しい列を追加する方法

194
kim larsen

マイグレーションを作成するには、Artisan CLIでmigrate:makeコマンドを使用します。既存のモデルと衝突しないように特定の名前を使用してください

Laravel 3の場合:

php artisan migrate:make add_paid_to_users

Laravel 5+の場合:

php artisan make:migration add_paid_to_users

その後、Schema::table()メソッドを使用する必要があります(新しいテーブルを作成するのではなく、既存のテーブルにアクセスしているため)。そして、あなたはこのような列を追加することができます:

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('paid');
    });
}

ロールバックオプションを追加することを忘れないでください。

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('paid');
    });
}

その後、マイグレーションを実行できます。

php artisan migrate

これは両方ともLaravel 3のドキュメントでよくカバーされています。

そしてLaravel 4/Laravel 5の場合:

編集する

特定の列の後にこのフィールドを追加するには$table->integer('paid')->after('whichever_column');を使用してください。

446
Phill Sparks

Laravel 5.1以降を使用している未来の読者のためにmike3875の答えに追加します。

作業を早くするために、フラグ "--table"を次のように使うことができます。

php artisan make:migration add_paid_to_users --table="users"

これはupdownメソッドの内容を自動的に追加します。

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

同様に、新しいマイグレーションを作成するときに--create["table_name"]オプションを使用すると、マイグレーションに定型句が追加されます。ちょっとしたことですが、それらをたくさんするときに役に立ちます。

53
camelCase

Laravel 5を使用している場合、コマンドは次のようになります。

php artisan make:migration add_paid_to_users

ものを作るためのすべてのコマンド(コントローラー、モデル、マイグレーションなど)はmake:コマンドの下に移動しました。

php artisan migrateはまだ同じです。

24
mikelovelyuk

次のように初期のSchema::createメソッド内に新しい列を追加できます。

Schema::create('users', function($table) {
    $table->integer("paied");
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

すでにテーブルを作成している場合は、新しい移行を作成してSchema::tableメソッドを使用して、そのテーブルに列を追加できます。

Schema::table('users', function($table) {
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

ドキュメンテーションはこれについてかなり徹底的であり、 バージョン3 から バージョン4 .

17
tplaner

レベル5.6以上

新しいカラムをFOREIGN KEYとして既存のテーブルに追加したい場合。

このコマンドを実行して、新しい移行を作成します。make:migration

例:

php artisan make:migration add_store_id_to_users_table --table=users

Database/migrationsフォルダに新しい移行ファイルがあります。

2018_08_08_093431_add_store_id_to_users_table.php(コメントを参照)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddStoreIdToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Create new column
            // You probably want to make the new column nullable
            $table->integer('store_id')->unsigned()->nullable()->after('password');

            // 2. Create foreign key constraints
            $table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Drop foreign key constraints
            $table->dropForeign(['store_id']);

            // 2. Drop the column
            $table->dropColumn('store_id');
        });
    }
}

その後、以下のコマンドを実行してください。

php artisan migrate

何らかの理由で最後の移行を元に戻したい場合は、次のコマンドを実行してください。

php artisan migrate:rollback

移行についての詳細は、 のドキュメント にあります。

15
chebaby

テーブルに列を追加してから、端末に次のように入力して、既存の移行ファイルを変更するだけです。

$ php artisan migrate:refresh
6
Mahana Delacour

これはlaravel 5.1に取り組んでいます。

まず、あなたの端末でこのコードを実行してください。

php artisan make:migration add_paid_to_users --table=users

その後、プロジェクトディレクトリに移動し、ディレクトリデータベースを展開します - ファイルadd_paid_to_users.phpを移行して編集し、このコードを追加します

public function up()
{
    Schema::table('users', function (Blueprint $table) {
         $table->string('paid'); //just add this line
    });
}

その後端末に戻ってこのコマンドを実行してください。

php artisan migrate

これが助けになることを願っています。

4
Rosidin Bima

前回の移行を最初にロールバックする

php artisan migrate:rollback

その後、既存の移行ファイルを変更(新規追加、列名の変更、または列の削除)してから、移行ファイルを再実行します。

php artisan migrate
2
noobgrammer

他の人が述べたように、移行ファイルがベストプラクティスですが、ちょっとしたことで、いじくり回して列を追加することもできます。

$ php artisan tinker

これが端末用のワンライナーの例です。

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })



(ここでは読みやすいようにフォーマットされています)

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ 
    $table->integer('paid'); 
});
0
mfink