Symfony-doctrine-orm
symfony-Doctrine ORM
Symfony Webフレームワークでは、モデルが重要な役割を果たします。 それらはビジネスエンティティです。 これらは顧客から提供されるか、バックエンドデータベースから取得され、ビジネスルールに従って操作され、データベースに保持されます。 これらは、ビューによって表示されるデータです。 この章では、モデルとバックエンドシステムとの相互作用について学習します。
データベースモデル
モデルをバックエンドリレーショナルデータベースアイテムにマップして、モデルを安全かつ効率的に取得して永続化する必要があります。 このマッピングは、オブジェクトリレーショナルマッピング(ORM)ツールを使用して実行できます。 Symfonyは、サードパーティのPHPデータベースORMツールである Doctrine とSymfonyを統合する別個のバンドル DoctrineBundle を提供します。
ドクトリンORM
デフォルトでは、Symfonyフレームワークはデータベースを操作するコンポーネントを提供しません。 しかし、それは Doctrine ORM と密接に統合します。 Doctrineにはデータベースストレージとオブジェクトマッピングに使用されるいくつかのPHPライブラリが含まれています。
次の例は、Doctrineの機能、データベースの設定方法、データの保存および取得方法を理解するのに役立ちます。
Doctrine ORMの例
この例では、最初にデータベースを構成し、Studentオブジェクトを作成してから、その中でいくつかの操作を実行します。
これを行うには、次の手順に従う必要があります。
ステップ1:Symfonyアプリケーションを作成する
次のコマンドを使用して、Symfonyアプリケーション dbsample を作成します。
ステップ2:データベースを構成する
通常、データベース情報は「app/config/parameters.yml」ファイルで設定されます。
ファイルを開き、次の変更を追加します。
これで、Doctrine ORMはデータベースに接続できます。
ステップ3:データベースを作成する
次のコマンドを発行して、「studentsdb」データベースを生成します。 このステップはDoctrine ORMでデータベースをバインドするために使用されます。
コマンドを実行すると、空の「studentsdb」データベースが自動的に生成されます。 画面に次の応答が表示されます。
ステップ4:地図情報
マッピング情報は「メタデータ」に他なりません。 Studentクラスとそのプロパティが特定のデータベーステーブルにどのようにマッピングされるかをDoctrine ORMに正確に通知するルールのコレクションです。
さて、このメタデータは、YAML、XMLなど、さまざまな形式で指定するか、アノテーションを使用してStudentクラスを直接渡すことができます。 次のように定義されています。
Student.php
ファイルに次の変更を追加します。
ここでは、テーブル名はオプションです。 テーブル名が指定されていない場合、エンティティクラスの名前に基づいて自動的に決定されます。
ステップ5:エンティティをバインドする
Doctrineはあなたのためにシンプルなエンティティクラスを作成します。 エンティティの構築に役立ちます。
次のコマンドを発行して、エンティティを生成します。
その後、次の結果が表示され、エンティティが更新されます。
Student.php
ステップ6:検証のマッピング
エンティティを作成したら、次のコマンドを使用してマッピングを検証する必要があります。
それは次の結果を生成します-
Studentsテーブルを作成していないため、エンティティは同期していません。 次のステップでSymfonyコマンドを使用して、studentsテーブルを作成しましょう。
ステップ7:スキーマを作成する
DoctrineはStudentエンティティに必要なすべてのデータベーステーブルを自動的に作成できます。 これは、次のコマンドを使用して実行できます。
コマンドを実行すると、次の応答が表示されます。
このコマンドは、データベースの外観と実際の外観を比較し、データベーススキーマをあるべき場所に更新するために必要なSQLステートメントを実行します。
ここで、次のコマンドを使用してスキーマを再度検証します。
それは次の結果を生成します-
ステップ8:ゲッターとセッター
「エンティティのバインド」セクションで見たように、次のコマンドはStudentクラスのすべてのゲッターとセッターを生成します。
ステップ9:オブジェクトをデータベースに永続化する
これで、Studentエンティティを対応するStudentテーブルにマッピングしました。 これで、Studentオブジェクトをデータベースに永続化できるはずです。 バンドルのStudentControllerに次のメソッドを追加します。
StudentController.php
ここでは、ベースコントローラーのgetDoctrine()を介してgetManager()メソッドを使用して、Doctrineマネージャーにアクセスし、Doctrineマネージャーのpersist()メソッドを使用して現在のオブジェクトを永続化します。 * persist()メソッドはコマンドをキューに追加しますが、 flush()*メソッドは実際の作業を行います(学生オブジェクトを保持します)。
ステップ10:データベースからオブジェクトを取得する
StudentControllerで、学生の詳細を表示する関数を作成します。
ステップ11:ビューを作成する
表示アクションを指すビューを作成しましょう。 ビューディレクトリに移動し、ファイル「displayl.twig」を作成します。 ファイルに次の変更を追加します。
ブラウザでURL「http://localhost:8000/student/display」をリクエストすることで結果を取得できます。
画面に次の出力が生成されます-
ステップ12:オブジェクトを更新する
StudentControllerのオブジェクトを更新するには、アクションを作成し、次の変更を追加します。
ここで、URL「http://localhost:8000/Student/update/1」をリクエストすると、次の結果が生成されます。
画面に次の出力が生成されます-
ステップ13:オブジェクトを削除する
オブジェクトの削除も同様であり、エンティティ(doctrine)マネージャーのremove()メソッドを呼び出す必要があります。
これは、次のコマンドを使用して実行できます。