web-dev-qa-db-ja.com

Laravel 5.4特定のテーブルの移行

こんにちは https://laravel.com/docs/5.4/migrations に含まれるすべてのドキュメントを読んでください。

特定の移行ファイルを移行する方法はありますか(1回の移行のみ)、今すぐphp artisan migrate:refreshを使用し、すべてのフィールドがリセットされるたびに変更が発生します。

37
Martney Acha

最初に、テーブル用にmigrationファイルを1つ作成する必要があります。

public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fname',255);
            $table->string('lname',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }

作成後testフォルダー内のmigrationsフォルダー、次に新規作成migration移動/コピーされたtestフォルダー内で以下のコマンドを実行あなたのterminal/cmdのように:

php artisan migrate --path=/database/migrations/test/

データベースのmigrationsテーブルを見るだけで、移行ファイル名とバッチ番号の値のリストが表示されます。

次の構造があると仮定します。

id     migration                                           batch

1      2014_10_12_000000_create_users_table                  1 
2      2014_10_12_100000_create_password_resets_table        1
3      2016_09_07_103432_create_tabel_roles                  1

2016_09_07_103432_create_tabel_roles移行のみをロールバックする場合は、移行バッチの値を2に変更します。これはすべての中で最も高く、次のように実行します。

php artisan migrate:rollback

ここでは、バッチ値2のテーブルのみがロールバックされます。次に、そのテーブルを変更し、次のコンソールコマンドを実行します。

php artisan migrate

migrationsテーブルのバッチ値は、移行の順序を定義します。ロールバックすると、最新のバッチ値または最高のバッチ値を持つ移行が最初にロールバックされ、次に他の移行がロールバックされます。そのため、データベースの値を変更してから、特定の移行ファイルをロールバックできます。

テーブル構造間の関係のため、毎回バッチ番号を変更することはお勧めできませんが、単一のテーブルロールバックがテーブル間の整合性に違反しない場合にこのケースを使用できます。

ご理解ください。

44
Sagar Gautam

このテーブルだけを更新して実行するには、移行ファイルにパスを追加する必要があります

php artisan migrate:refresh --path=/database/migrations/fileName.php
15
Wissem SASSI

言及する価値があると思う別のソリューションを投稿したかっただけです。

  1. 移行テーブルで移行名を持つ行を見つけて削除します。次のようになります:2016_06_01_000001_create_oauth_auth_codes_table
  2. データベースからテーブルを削除します。 DROP TABLE oauth_auth_codes
  3. Php artisan migrateを実行します

必要なテーブルのみを移行し、他には何も触れません

5
tylik

ファイルを新しいディレクトリ(ex:selected)に配置してから適用する必要があります

php artisan migrate  --path=/database/migrations/selected

ロールバックが必要な場合:

php artisan migrate:rollback  --path=/database/migrations/selected

注:

php artisan migrate:refresh

これにより、デフォルトのディレクトリ(/ database/migrations)にあるすべての移行ファイルがロールバックされて移行されます

4
Ahmad Zahabi
php artisan help migrate

オプションが表示されます:

--path [= PATH]実行される移行ファイルへのパス

ところで、移行するファイルのルートフォルダーを指定できます。

php artisan migrate --path=/database/migrations/sample.php

または、移行で新しいフォルダーを作成し、その中に必要なすべての移行ファイルを移行できます。

php artisan migrate --path=/database/migrations/new_folder
4

テーブルを削除し、移行テーブルからそのレコードを削除します。

その後、移行を再度実行します。

php artisan migrate
3
sskoko

ロールバックのみ可能です:

php artisan migrate:rollback

https://laravel.com/docs/5.4/migrations#rolling-back-migrations

「step」オプションを使用して、ロールバックする移行の数を指定できます。

php artisan migrate:rollback --step=1

ここにいくつかのトリックがあります:

Laravelで特定の移行をロールバックする

3
Jed

または、「migrations」テーブルでデータベースから移行ファイル名を削除してから実行するだけです。php artitsan migration

2
Lasha Shonia

修正-データベースの前のスラッシュを削除

$ php artisan migrate --path=database/migrations/migration.php
2
TCruz

--path =オプションを使用して、実行する特定のサブフォルダーを定義し、そこに特定の移行を配置することができます。

または、理想的なものではない参照およびテーブルをDBおよび移行テーブルから削除する必要があります:/

1
Chris WB

別のテーブルを作成する場合は、新しい移行ファイルを作成してください。うまくいくでしょう。

users_tableという名前の移行をid, first_name, last_nameで作成する場合。次のような移行ファイルを作成できます

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name',255);
            $table->string('last_name',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }

Migrate:refreshを使用せずに「ステータス」などの別のファイルを追加する場合。 「add_status_filed_to_users_table」のような別の移行ファイルを作成できます

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

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

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

また、php artitsan migrationを指定して移行を実行すると、新しい移行ファイルが移行されます。

ただし、ファイルされた「ステータス」を最初のmgrationファイル(users_table)に追加し、移行を実行した場合。移行するものは何もありません。 php artisan migrate:refreshを実行する必要があります。

この助けを願っています。

1
Nguyen Hoang

これを使用できます。

-> https://packagist.org/packages/sayeed/custom-migrate

-> https://github.com/nilpahar/custom-migration/

これは非常に使いやすいです

0
Hasan