| layout | default |
|---|---|
| title | Doctrineのためにデーターベース構造を設定しよう |
-
本章では以下を行います。
-
ORMの概要とエンティティマネージャーの説明を行います。
-
エンティティファイルとエンティティマネージャーの説明を行います。
-
エンティティマネージャーとデーターベース構造定義ファイルの関係性を説明します。
-
データーベース構造定義ファイル(Eccube.Entity.[エンティティ名].dcm.yml)の作成方法を説明します。
-
-
前章で、本チュートリアルのテーブルを作成しました。
-
EC-CUBE 3ではデーターベース操作をDoctineというObjectRelationalMappingを用いて透過的にデーターベースレコードを扱います。
-
おおまかな概念は以下の通りです。
-
JPA/Hibernate の説明ですが、Doctrineのエンティティマネージャーの概要を理解しやすくなるかと思います。
-
-
Doctrineでは、エンティティマネージャーがプログラム上の、データモデルオブジェクト(エンティティ)を管理し、レコードの差分を確認しながら、適切に登録、更新を行います。
-
エンティティ構造は、エンティティクラスを実際に作成するため、構造をDoctrineに明示する必要はありませんが、エンティティとテーブルの関連は、定義ファイルを作成し、明示することではじめて、エンティティと**テーブルを対応(Mapping)**させる事が可能となります。
-
この章では、Entityとテーブルの対応(Mapping)を定義するファイルを作成します。
-
以下フォルダに作成します。
- /src/Eccube/Resource/doctrine
-
フォルダの中のファイルEccube.Entity.AuthorityRole.dcm.ymlをコピー・リネームします。
-
ファイル名はEccube.Entity.Crud.dcm.ymlとします。
- Eccube.Entity.Crud.dcm.yml(中身はEccube.Entity.AuthorityRole.dcm.yml)
- 上記を以下の様に修正します。
-
上記の説明を行います
- [Eccube\Entity\Crud:]
- エンティティファイルのパスを指定します。
- ファイルの格納位置は決まっているため、ファイル名のみ変更となります。
- [table:]
- 該当テーブルのテーブル名を指定します。
- [repositoryClass:]
- 本テーブルに紐付けるレポジトリ名を指定します。
- ビジネスロジックの記述や、データベース操作を行うためのクラスです。
- 後の章で作成します。
- 「id:」に対してプライマリーキーの設定を行います。
- 前章で定義したテーブル定義の内容に従います。
-
「id:」セクション内、オプション「column:」に対してプライマリキーの物理名を指定します。
-
「id:」セクション内「generator:strategy」には「AUTO」を設定します。
- 本設定により、MySQL、PostgresSQLなどのオートインクリメントに自動で対応します。
- 他にも、IDの採番方法は設定可能ですが、通常は「AUTO」で問題ありません。
- 4.5.1. Identifier Generation Strategies
- 「fields:」に対して、通常カラムの設定を行います。
- 基本は「typeにはテーブルのフイールドタイプ」を、「nullableはNOT NULLであればfalse」と設定します。
- その他にも今回例の「length」など設定できるオプションがあります。
- 4.3. Property Mapping
-
本チュートリアルは初学者向けの内容のために、アソシエーション(リレーションの設定)は説明いたしません。
-
詳細な説明は以下を参考にしてください。
- 設定ファイルのフィールドタイプは以下を参照ください
http://docs.symfony.gr.jp/symfony2/book/doctrine.html#doctrine
- 基本的な設定の概要は以下を参照ください
- 定義ファイルの最後に以下の内容が記述されています。
lifecycleCallbacks: { }
- ここでは、Doctrineの処理に割り込む関数をコールバックとして指定できますが、通常用いる事はないため、説明は割愛いたします。
- 慣例的に記述し、削除を行わないでください。
- Doctrineの概要を説明しました。
- Doctrineとエンティティマネージャーについて説明しました。
- テーブル、データーベース定義ファイル、エンティティ、レポジトリの関係について説明しました。
- Eccube.Entity.[エンティティ名].dcm.ymlの作成方法を説明しました。
- Eccube.Entity.[エンティティ名].dcm.ymlの記述方法を説明しました。