a.php
、b.php
、c.php
、およびd.php
の移行クラスファイルを取得したとします。特定の移行状態(たとえば、artisanコマンドでb.php
内で定義された状態)にロールバックする方法は?
恐れていますが、これを直接行うことはできません。
1、最後の移行操作をロールバック(すべての移行は最後のバッチで実行されました)
_php artisan migrate:rollback
_
2、すべての移行をロールバックする
_php artisan migrate:reset
_
3、すべての移行をロールバックし、すべてを再度実行します
_php artisan migrate:refresh
php artisan migrate:refresh --seed
_
状況に応じて、b.phpとup()
メソッドを変更してから、_artisan migrate:refresh
_コマンドを実行します。
データベースを手動で編集して、ハッキングする方法があります。 migrations
テーブルで、最後の移行に異なるバッチ番号を与えることにより、batch
列を変更します。それらは昇順であることに注意してくださいので、それに応じて編集してください。これは、どの移行が個別に適用されたかを追跡します。
次にartisan:rollback
を実行すると、最後の「バッチ」が取り消されます。
すべてを分離したい場合は、上から始めて、それぞれ1、2、3、4、5などを指定します。簡単にスクリプト化できることがわかります。すべての移行を分離したい。
私の経験では。私は決して移行しない:ロールバック。私は通常、以前の移行を「元に戻す/ロールバック」するために必要なすべての変更を行う別の移行を作成します。
この方法により、2倍のステップをロールバックする場合に柔軟になり、必要な変更を有効にする新しい移行を作成してから、php artisan migrateで新しい移行を実行できます。
実際、この機能はまだありません。驚いたことに
最善のアイデアは、新しいファイルbacktob.phpを作成し、他の移行ファイルのダウンコールを作成することです。コピーアンドペーストを避けるために、次のようなことができます。
class BacktoB {
public function up () {
// the database is in the after D state //
$migrateD = new D();
$migrateD->down();
// the database is in the after C state //
$migrateC = new C();
$migrateC->down();
// the database is in the before C state //
// before C = B //
}
public function down () {
// the database is in the B state //
$migrateC = new C();
$migrateC->up();
// the database is in the after C state //
$migrateD = new D();
$migrateD->up();
// the database is in the after D state //
}
}
ご覧のとおり、元に戻すことを望むものを、それらのマイグレーションの上下を呼び出す上下を作成することができます。
それは理想ではありませんが、私たちにできることです。
Laravel 5.3では、重いスクリプトを作成する必要はありません。指定された数の移行をロールバックできるためです。
php artisan migrate:rollback --step=1
参照用のマニュアル page があります。
reallyが必要な場合-移行テーブルにクエリを実行し、必要なファイルを検索し、ロールバックする回数を計算するカスタム関数を作成できます-その後、「migrate」のループを実行します:rollback '必要な移行に達するまで...
簡単でありながら汚い方法があります:
a.php
、b.php
、およびc.php
の移行があり、c
およびb
をロールバックする場合は、a.php
を変更するだけです。構文エラーが発生する方法...セミコロンまたは何かをドロップします。
したがって、php artisan migrate:rollback
を実行すると、c
とb
の両方がロールバックされ、a
でエラーが発生して停止します。それ以降、c
とb
のロールバックは最後の移行操作と見なされます。
a.php
で意図的に作成したエラーを修正することを忘れないでください。
Laravelはphp artisan migrate:rollbackを提供して移行スクリプトをロールバックするだけなので、選択した移行スクリプトをロールバックする最良の方法は、新しい移行スクリプトを作成し、スクリプトをdownメソッド(on選択した移行スクリプト)を新しく作成した移行スクリプトに追加します。
Php artisan migrate:rollbackコマンドを使用します。
php artisan migrate:rollback
ロールバックの動作を確認するには、-pretendオプションを使用します。
php artisan migrate:rollback --pretend
デフォルト以外のデータベース接続を指定することもできます。
php artisan migrate:rollback --pretend --database=other-one