Skip to content

Latest commit

 

History

History
213 lines (153 loc) · 8.65 KB

File metadata and controls

213 lines (153 loc) · 8.65 KB
layout default
title Doctrineのためにデーターベース構造を設定しよう

{{ page.title }}

本章メニュー

  • 本章では以下を行います。

    1. ORMの概要とエンティティマネージャーの説明を行います。

    2. エンティティファイルとエンティティマネージャーの説明を行います。

    3. エンティティマネージャーとデーターベース構造定義ファイルの関係性を説明します。

    4. データーベース構造定義ファイル(Eccube.Entity.[エンティティ名].dcm.yml)の作成方法を説明します。

データーベース構造定義ファイル

  • 前章で、本チュートリアルのテーブルを作成しました。

  • EC-CUBE 3ではデーターベース操作をDoctineというObjectRelationalMappingを用いて透過的にデーターベースレコードを扱います。

  • おおまかな概念は以下の通りです。

  • Doctrineでは、エンティティマネージャーがプログラム上の、データモデルオブジェクト(エンティティ)を管理し、レコードの差分を確認しながら、適切に登録、更新を行います。

  • エンティティ構造は、エンティティクラスを実際に作成するため、構造をDoctrineに明示する必要はありませんが、エンティティとテーブルの関連は、定義ファイルを作成し、明示することではじめて、エンティティと**テーブルを対応(Mapping)**させる事が可能となります。

  • この章では、Entityとテーブルの対応(Mapping)を定義するファイルを作成します。

Eccube.Entity.[エンティティ名].dcm.ymlの作成

ファイルの作成

  • 以下フォルダに作成します。

    • /src/Eccube/Resource/doctrine
    1. フォルダの中のファイルEccube.Entity.AuthorityRole.dcm.ymlをコピー・リネームします。

    2. ファイル名はEccube.Entity.Crud.dcm.ymlとします。

      • Eccube.Entity.Crud.dcm.yml(中身はEccube.Entity.AuthorityRole.dcm.yml)
<script src="http://gist-it.appspot.com/https://github.com/EC-CUBE/ec-cube.github.io/blob/master/Source/tutorial_7/dcm_yml_before.yml"></script>

ファイルの修正

  • 上記を以下の様に修正します。
<script src="http://gist-it.appspot.com/https://github.com/EC-CUBE/ec-cube.github.io/blob/master/Source/tutorial_7/dcm_yml_after.yml"></script>
  • 上記の説明を行います

    1. [Eccube\Entity\Crud:]
    • エンティティファイルのパスを指定します。
    • ファイルの格納位置は決まっているため、ファイル名のみ変更となります。
    1. [table:]
    • 該当テーブルのテーブル名を指定します。
    1. [repositoryClass:]
    • 本テーブルに紐付けるレポジトリ名を指定します。
    • ビジネスロジックの記述や、データベース操作を行うためのクラスです。
    • 後の章で作成します。
    1. 「id:」に対してプライマリーキーの設定を行います。
    • 前章で定義したテーブル定義の内容に従います。
    1. 「id:」セクション内、オプション「column:」に対してプライマリキーの物理名を指定します。

    2. 「id:」セクション内「generator:strategy」には「AUTO」を設定します。

    • 本設定により、MySQL、PostgresSQLなどのオートインクリメントに自動で対応します。
    • 他にも、IDの採番方法は設定可能ですが、通常は「AUTO」で問題ありません。
    • 4.5.1. Identifier Generation Strategies
    1. 「fields:」に対して、通常カラムの設定を行います。
    • 基本は「typeにはテーブルのフイールドタイプ」を、「nullableはNOT NULLであればfalse」と設定します。
    • その他にも今回例の「length」など設定できるオプションがあります。
    • 4.3. Property Mapping
    1. 本チュートリアルは初学者向けの内容のために、アソシエーション(リレーションの設定)は説明いたしません。

    2. 詳細な説明は以下を参考にしてください。

    • 設定ファイルのフィールドタイプは以下を参照ください

    http://docs.symfony.gr.jp/symfony2/book/doctrine.html#doctrine

    • 基本的な設定の概要は以下を参照ください

    データベースと Doctrine (“The Model”)

備考

  • 定義ファイルの最後に以下の内容が記述されています。

lifecycleCallbacks: {  }

  • ここでは、Doctrineの処理に割り込む関数をコールバックとして指定できますが、通常用いる事はないため、説明は割愛いたします。
  • 慣例的に記述し、削除を行わないでください。

本章で学んだ事

  1. Doctrineの概要を説明しました。
  2. Doctrineとエンティティマネージャーについて説明しました。
  3. テーブル、データーベース定義ファイル、エンティティ、レポジトリの関係について説明しました。
  4. Eccube.Entity.[エンティティ名].dcm.ymlの作成方法を説明しました。
  5. Eccube.Entity.[エンティティ名].dcm.ymlの記述方法を説明しました。