ホームページ >PHPフレームワーク >Laravel >Laravelフレームワークでのデータベースとデータベース移行の簡単な分析
Laravel フレームワーク の開発方法はアジャイルで反復的であり、最初からすべての正しいコードを取得できるとは期待できません。代わりに、コードを作成し、テストし、エンド ユーザーと対話して理解を深めます。
仕事のためには、サポートとなる一連の実践が必要です。私たちは、Subversion、GIT、Mercurial などのバージョン管理ツールを使用してアプリケーションのソース コード ファイルを保存し、開発中にエラーを元に戻したり、変更を追跡したりできるようにします。
しかし、アプリケーションが変更されると、バージョン管理だけでは効果的に管理できない領域が生じます。開発が進むにつれて、Laravel アプリケーションのデータベース スキーマは進化し続けました。テーブルを追加し、列の名前を変更し、インデックスを削除するなどです。データベースの変更は、アプリケーション コードと連動して行われます。
データベース スキーマの変更を追跡するには、洗練された方法が必要です。通常、いくつかのアプローチがあります。
開発チーム内で作業する場合、全員がスキーマの変更について把握する必要があります。
実稼働サーバーにデプロイする場合は、データベース スキーマをアップグレードする堅牢な方法が必要です。
複数のマシンで作業する場合は、すべてのデータベース スキーマの同期を保つ必要があります。
データベース スキーマとアプリケーション コードの同期を維持することは、アプリケーション開発者が従うべき厳密な規則や規律がなければ、これまで非常に面倒な作業でした。開発者 (またはデータベース管理者) は、必要なスキーマ変更を行います。ただし、アプリケーション コードが以前のバージョンにロールバックされた場合、データベース スキーマの変更を元に戻すことが困難になり、データベースのバージョン情報がアプリケーション コードのバージョン情報と不一致になります。
移行は、アプリケーションのデータ アーキテクチャを進化させるための Laravel の方法であり、変更を加えるたびにデータベースを削除したり再構築したりする必要はありません。削除と再構築がないため、変更を加えるたびにデータが失われることがありません。移行を実行する場合の唯一の変更は、前に進むか後ろに進むかに関係なく、データベース スキーマをあるバージョンから別のバージョンに移動することです。
Laravel の移行では、データベース スキーマを反復的に変更する手段が提供されます。SQL 操作を使用する必要はありませんが、PHP コードを使用できます。 Laravel スキーマ ジェネレーターを使用すると、データベース テーブルをすばやく作成し、列やインデックスを挿入できます。クリーンで表現力豊かな構文を使用してデータベースを操作します。 Laravel の移行はデータベースのバージョン管理であると考えるかもしれません。
データベースに依存しない方法で定義できる上位レベルのインターフェイスを定義することにより、データベース スキーマを作成および維持します。 PHP を使用してテーブルを作成し、列とインデックスを定義し、スキーマを一度作成して、サポートされているデータベース バックエンドに適用します。追加の利点として、Laravel はどの移行が適用され、どの移行がまだ適用される必要があるかを追跡します。
Laravel の移行は、アプリケーションの app/database/migrations ディレクトリにある単なる PHP ソース ファイルです。各ファイルには、基礎となるデータベースに対する一連の変更が含まれています。データベースへの変更は、データベース固有の SQL ではなく PHP コードで行われます。 PHP 移行コードは最終的に現在のデータベースに一致する DDL に変換されるため、データベース プラットフォームの切り替えが非常に簡単になります。移行コードは独自のディレクトリに保存されるため、他のプロジェクト コードと同様にバージョン管理に含める必要があります。 Laravel の移行は、Artisan ツールを使用してコマンドラインから明示的に実行されます。
Laravel の古いバージョンでは、移行されたファイルには 001_create_employees_table.php などのより単純な名前が付いています。 Laravel 3 (Laravel 4.1 および同様) では、名前の最初の部分がシーケンス番号から 2014_03_11_032903_create_employees_table.php のような長いものに変更される新しい命名規則が導入されました。ファイル名の形式は YYYY_MM_DD_HHMMSS_some_meaningful_name.php で、識別された UTC タイムスタンプの後に移行名が続くことを意味します。
新しい幅広い名前は、名前の競合を避けるのに役立ち、チームで作業している開発者の場合は、自分の移行を確認できます。
さらに、Laravel はファイルを順番に実行できるようにファイルのタイムスタンプを移行します。タイムスタンプ番号は、個々の移行バージョン番号が適用される順序でどの移行が適用されるかを定義するため、移行の鍵となります。
SQL スクリプトと同様に、移行は上から実行されるため、これらのファイルを実行する必要があります。順次実行により、テーブルが存在しないときに列を挿入しようとする可能性がなくなります。
移行ファイルを手動で作成することもできますが、Artisan ツールを使用して移行スクリプトを生成する方が簡単です (エラーが発生しにくくなります)。必要に応じて、これらのファイルを後で編集できます。
Artisan ツールを使用してデータベースに移行します。 Laravel は、特定の移行セットの実行に要約される一連の職人的タスクを提供します。
[注意]artisan listを実行すると、artisanでサポートされているタスクのリストを表示できます。ほとんどのデータ移行関連タスクには、接頭辞 mitig: が付いています。
知っておくべき一般的なタスクをいくつか挙げます:
移行:インストール
おそらく最初に使用する移行関連の職人タスクは、移行:インストールです。 Laravel は内部的に特別なテーブルを使用して、どの移行が実行されたかを追跡します。このテーブルを作成するには、artisan コマンド ライン ツールを使用するだけです:
$php 職人 移行:インストール
移行
アプリケーションのテーブルと列に追加する最新の更新をサポートするために、移行タスクを実行してデータベースを頻繁に更新します。 。最も基本的な形式では、まだ実行されていないすべての移行に対して up() メソッドのみが実行されます。そのような移行がない場合、移行は終了します。これらの移行は、移行された日付に基づいて実行されます。
移行:ロールバック
私は移行を書くときに時々間違いを犯します。すでに移行を実行している場合、移行を編集して再度移行を実行することはできません。Laravel はすでに移行が実行されていると想定しているため、artisan を再度実行すると、
移行しても何もしません。職人を使用する必要があります
merge:rollback は移行をロールバックし、移行を編集してから、artisan を実行します。
正しいバージョンを実行するために移行してください。
一般に、既存の移行を編集することはお勧めできません。編集すると、あなたや同僚にとって追加の作業が必要になります。また、既存のバージョンの移行がマシンの実稼働環境ですでに実行されている場合は、頭痛の種になる可能性があります。代わりに、必要な変更を実行するには、新しい移行を作成する必要があります。
[注]職人 merge:rollback は最後の移行アプリケーションを削除します。 Laravel は移行「操作」全体に戻ります。したがって、最後の移行コマンドで 15 個の移行が実行された場合、15 個の移行はすべてロールバックされます。列またはテーブルを削除すると、データが失われることに注意してください。
maigrate:reset
すべての移行をロールバックします (すべてのテーブルとデータが削除されます)
maigrate:refresh
artisan merge:refresh タスクはデータベースを削除し、再作成し、現在のスキーマをロードします。これは、リセットを実行し、その後すべての移行を再実行するための便利なショートカットです。
maigrate:make
artisan merge:make コマンドが伝える
Laravel で移行ファイルのスケルトン (実際には
PHP ファイル) を作成し、app/database/migrations フォルダーに保存します。その後、このファイルを編集してテーブル/インデックスの定義を具体化できます。それでは、職人さん
移行コマンドが実行されると、artisan はこのファイルをクエリして生成します。
SQL DDL の実際のコード。
関連する推奨事項:
freetds を介して laravel5 を sqlserver に接続する方法 (コード)
以上がLaravelフレームワークでのデータベースとデータベース移行の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。