Laravel5.4固有のテーブル移行


84

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

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

回答:


132

まず、次の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();
        });
    }

後に作成した試験でフォルダの移行を、新しく作成したフォルダの移行がでコピー/移動テストフォルダや自分の中でコマンドの下に実行し、端末/ cmdをよいます:

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

ありがとう。これはまさに私が探していたものです。
サディク

4
php職人移行--path = database / migrations / test /は私のために働いた
Joyal 2018年

これがうまくいかない場合は、stackoverflow.com
HariHarker19年

76

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

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

1
お疲れ様でした。何も機能しませんでしたが、ソリューションは機能しました。どうもありがとう。
Vipertecpro

まさに私が探していた:)ありがとう仲間
VishalParkash

場合によっては、最初のバックスラッシュなしでdatabase /migrations/fileName.phpになります
Ahmed Aboud

更新すると、すべてのデータが失われることに注意してください。データを保持したい場合は、データベースにデータをエクスポートとして保存し、更新後にインポートする必要があります。
タラニス

@Taranisすべてではなく
更新

54

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表のバッチ値は、移行の順序を定義します。ロールバックすると、最新またはバッチ値が最も高い移行が最初にロールバックされ、次に他の移行がロールバックされます。したがって、データベースの値を変更してから、特定の移行ファイルをロールバックできます。

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

ご理解いただければ幸いです。


@MartneyAchaあなたがあなたの問題の解決策を持っていることを嬉しく思います乾杯!!
Sagar Gautam 2017

いい説明。テーブルに外部キー関係がある場合、それは機能しません
Ogbonna Vitalis 2018

@OgbonnaVitalisありがとうございます、それは独立したテーブルのためのより簡単な方法になります。受け入れられた答えは、単一のテーブルをロールバックおよび移行する正確な方法を提供します。複数の独立したテーブルの場合は機能します。
Sagar Gautam 2018

14

オートコンプリートにタブを使用する場合

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'

zshを使用して、私には機能しません
digout

8

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

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

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

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

注意:

php artisan migrate:refresh

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


'--path = / database / migrations /fileName.php'のようにファイル名を直接入力できる新しいディレクトリを作成する必要はありません。
WissemSASSI19年

8

このようなコマンドを実行できます

php artisan migrate --path=/database/migrations/2020_04_10_130703_create_test_table.php

7
php artisan help migrate

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

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

ちなみに、移行するファイルのルートフォルダを指定することもできます。

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

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

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

's'を見逃しただけです。それは「移行」でなければなりません!php職人移行--path = / database / migrations / new_folder
Pasindu Jayanath 2018年

php職人の移行--path = / database / migrations / new_folder /最後の「/」が必要
PasinduJayanath18年

5

別の解決策を投稿したかっただけですが、これは言及する価値があると思います。

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

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



3

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

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

php artisan migrate

3

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

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

1
移行するものはありません。
ZOD


3

1つの特定のテーブルを作成する場合。このコードを使用できます。laravel(5.x)バージョンで動作します。

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

2

または、データベースから「migrations」テーブルで移行ファイル名を削除してから、次のコマンドを実行することもできます:php artitsanmigration


1

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

または、DBテーブルと移行テーブルから参照とテーブルを削除する必要がありますが、これは理想的ではありません:/


1

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

で名前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');
    }

移行せずに「ステータス」のような別のファイルを追加する場合:更新。「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');
    });
}

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

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

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



1

php職人移行--path = / database / migrations / fileName.php

指示に従ってください。ここでこのコマントファイル名を実行すると、移行テーブル名になります。例:php artisan merge --path = / database /migrations/2020_02_21_101937_create_jobs_table.php



0

このコマンドはターミナルでのみ実行できます

php artisan migrate --path=database/migrations/2020_10_01_164611_create_asset_info_table.php

移行後、特定のファイル名を入力する必要があります。または、移行内にフォルダがある場合は、移行後にそのフォルダ名を追加するだけです。

このような

php artisan migrate --path=database/migrations/yourfolder/2020_10_01_164611_create_asset_info_table.php

これが少しお役に立てば幸いです。ハッピーコーディング。


-1

まず、次のコマンドを実行する必要があります。

ステップ1:

php artisan migrate:rollback

ステップ2:

php artisan migrate

テーブルがデータベースに戻ります。


各ステップに小さな説明を入れるとさらに役立ちます。これは、実際に何が起こっているのかをユーザーが理解するのに役立ちます。これは魔法のように物事を機能させるチートコードのように見えますが、場合によっては結果が悲惨なものになる可能性があります。
Ashwani Agarwal

質問を注意深く読んでください。その人がテーブルを1つだけ要求した場合、メソッドはすべての移行をロールバックしてから、すべてのテーブルを作成します。またphp artisan migration:refresh、同じように提供します。
Wajahat Hashmi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.