Laravelのコマンド「Refresh」と「Refresh」と「Reset」はどちらもデータベースの移行の管理に関連していますが、データベーススキーマ管理中に異なる目的を果たし、異なる方法で動作します。 Laravel開発者が開発または展開中にデータベース状態を効果的に処理するためには、それらの違いを理解することが重要です。
###移行:更新
`PHP Artisan Migrate:refresh`コマンドは、すべての移行をロールバックしてからすべてを再度実行します。これは、適用されたすべての移行(各移行の `down()`メソッドを実行する)をロールバックし、各移行に対して `up()`メソッドを再度実行して、データベーススキーマをゼロから再構築することを意味します。
- それがすること:
- すべての移行をロールバックします(すべてのスキーマの変更を元に戻します)。
- すべての移行を再実行して、データベーススキーマを再構築します。
- 典型的なユースケース:
- 移行を通じてデータベース構造を一貫させながらデータベーススキーマをリセットする場合に役立ちます。
- 移動をテストして、それらを複数回きれいに適用できるようにすることができます。
- 多くの場合、 `-seed`オプション(` php artisanが移行:更新 - seed`)と組み合わせて、再構築後にシードデータをデータベースに再飼育します。
- 利点:
- `down()`および `up()`メソッドを適切に適用することで、データベース構造を一貫させます。
- `-step`オプションを使用して、限られた数の移行を選択的に更新できます(たとえば、` php artisanの移行:更新 - step = 5`は、最後の5つの移行をロールバックして再実行します)。
- パフォーマンス:
- 再適用する前に移行ごとに `down()`メソッドを実行するため、多数の移行を処理する場合、「移動:fresh」よりも遅くなる場合があります。
- データ:
- すべての移行がロールバックされるため、再シードを使用しない限り、テーブル内のデータは失われます。
- 移行内で定義されているロールバックロジックを保存するため、移行が慎重に書かれている場合、矛盾を防ぐことができます。
###移行:リセット
「PHP Artisanが移行する:Reset`コマンドが適用されたすべての移行をロールバックし、データベースを元の移民状態に戻します。
- それがすること:
- すべての移行の方法を実行することにより、すべての移行をロールバックします。
- 「更新」とは異なり、移行を再実行しません。
- 典型的なユースケース:
- すべての移行を再適用せずに完全に元に戻したい場合に役立ちます。
- 次に何をすべきかを決定する前に、スキーマを完全にクリアする必要があるシナリオで役立ちます。
- 利点:
- すべての移行ベースのデータベーススキーマの変更をクリアします。
- データ:
- 「リフレッシュ」と同様に、移行をロールバックすると、テーブルデータが失われます。
- すべての移行がリセットされると、スキーマは存在しません。
- 行動:
- 移民状態にデータベースを残します。
- スキーマの再構築を意図している場合、その後、手動で「PHP Artisan Migrate」を実行する必要があります。
###追加コンテキスト:移行:新鮮な比較
直接尋ねられていませんが、「移行:fresh`コマンドはしばしば「更新」と「リセット」と混同され、違いをさらに明確にするのに役立ちます。
- `PHP Artisan Migrate:fresh`は、` down() `メソッドを実行せずに、データベース内のすべてのテーブルを直接ドロップし、すべての移行を実行します。
- 移行による移行をロールバックする代わりに、すべてのテーブルをドロップするだけなので、より速くなります。
- ロールバックロジックなしでデータベースをきれいに拭くことが許容される開発環境に最適です。
- 「リフレッシュ」のように、データと組み合わせることができます。
###違いのより深い説明
- ロールバックがどのように起こるか:
- 「リフレッシュ」と「リセット」はどちらも、スキーマの変更を元に戻すために、各移行の「down()」に依存しています。
- 「リセット」はすべてをロールバックして停止します。
- 「リフレッシュ」はすべてをロールバックしてから、すべてを再び移行します。
- コマンド後のデータベース状態:
- 「リセット」後、データベーススキーマは空です(移行からのテーブルはありません)。
- 「更新」後、データベーススキーマはあたかも新たに移動したかのように再構築されます。
- データの損失:
- すべての移行が完全にロールバックされるため、両方のコマンドがデータの損失を引き起こします。
-` -seed`フラグが使用されている場合、「更新」はシードデータを自動的に再導入できます。
- 開発ライフサイクルのユースケース:
- 移行を開発またはテストするときに「更新」を使用し、データを再編成しながらスキーマを再構築する必要があります。
- 「リセット」を使用して、新しい移行を手動で適用する前に、移行スキーマを完全にクリアしたり、新鮮な移行を実行したりします。
Laravel開発者向けの実用的なメモ
- 両方のコマンドは、「up() `および` down() `メソッドで適切にスクリプト化されている移行に依存します。つまり、` down() `メソッドが欠落または不完全である場合、ロールバックコマンド(` refresh`および `reset`)は矛盾した状態でデータベースを故障または残します。
- 「更新」は、移行中にロールバックロジックと潜在的なデータ関係を尊重したい環境では、「新鮮」よりも安全であると見なすことができます。
- すべてのデータが失われるため、どちらのコマンドもバックアップなしで生産データベースで不注意に使用する必要はありません。
- これらは主に、スキーマの反復が頻繁に発生し、データを結果なくリセットできる現地開発またはテスト環境で使用するために設計されています。
### まとめ
重要な違いは、次のとおりです。
- 移行:更新 - すべての移行をロールバックしてから、すべての移行を再度実行します。
- 移行:リセット - すべての移行をロールバックしますが、それらを再実行しないでください。
「移行:REFRESH」は、ロールバックと移行を介してスキーマをゼロから効果的に再構築し、再シードと段階的な更新を可能にします。
両方のコマンドは、Laravel開発者がデータベースバージョンを管理するための基本的なツールですが、さまざまなワークフローを提供し、データベース状態に独自の影響を与えます。
この理解は、アプリケーション開発、テスト、展開のさまざまな段階に適したコマンドを選択するのに役立ちます。
すべての使用法は、Laravelプロジェクト内でデータベース移行を管理するためのデータ損失、アプリケーションスキーマの一貫性、および開発者の意図への影響を考慮する必要があります。