<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Eccube\Entity\Master;
use Doctrine\ORM\Mapping as ORM;
if (!class_exists(CustomerOrderStatus::class, false)) {
/**
* CustomerOrderStatus
*
* @ORM\Table(name="mtb_customer_order_status")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
* @ORM\HasLifecycleCallbacks()
* @ORM\Entity(repositoryClass="Eccube\Repository\Master\CustomerOrderStatusRepository")
* @ORM\Cache(usage="NONSTRICT_READ_WRITE")
*/
class CustomerOrderStatus extends \Eccube\Entity\Master\AbstractMasterEntity
{
}
}
1. namespace Eccube\Entity\Master;
このクラスがEccube\Entity\Master
名前空間に属していることを示しています。名前空間はクラスを整理し、他の同名クラスと区別するための機能です。
2. if (!class_exists(CustomerOrderStatus::class, false))
CustomerOrderStatus
クラスがすでに存在している場合は、再定義しないようにする条件分岐です。
なぜ使うのか?
- クラスの定義が複数回読み込まれるのを防ぐため。
- 動的にクラスを生成したり、環境によってクラス定義を切り替える場面で役立ちます。
3. クラス定義
phpコードをコピーするclass CustomerOrderStatus extends \Eccube\Entity\Master\AbstractMasterEntity
このクラスは、AbstractMasterEntity
(マスターデータ用の抽象クラス)を継承しています。これにより、基本的なマスターデータ関連の機能(例: IDや名前などのプロパティ、共通ロジック)を利用できます。
4. Doctrine ORMのアノテーション
Doctrineアノテーションは、データベースとこのエンティティの関連付けを定義します。
4.1. @ORM\Table(name="mtb_customer_order_status")
- このエンティティが対応するデータベーステーブルの名前を指定します。
mtb_customer_order_status
という名前のテーブルにマッピングされています。
4.2. @ORM\InheritanceType("SINGLE_TABLE")
- 継承戦略を指定します。
- この場合、1つのテーブルに継承する全クラスのデータを格納します(SINGLE_TABLE方式)。
- 親クラスと子クラスを1つのテーブルで管理します。
4.3. @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
- 識別カラムを指定します。
- このカラムにより、SINGLE_TABLE方式でどのクラスのデータかを判別します。
- カラム名:
discriminator_type
- データ型:
string
- カラムの長さ:
255
- カラム名:
4.4. @ORM\HasLifecycleCallbacks()
- このエンティティでライフサイクルコールバック(エンティティの特定イベントにフックしてカスタム処理を実行)を使用できることを示します。
ライフサイクルコールバックの例:
- エンティティの作成・更新時に特定の処理を実行する。
- 例:
@ORM\PrePersist
,@ORM\PostLoad
など。
4.5. @ORM\Entity(repositoryClass="Eccube\Repository\Master\CustomerOrderStatusRepository")
- このエンティティに対応するリポジトリクラスを指定します。
CustomerOrderStatusRepository
には、CustomerOrderStatus
エンティティのデータ操作に関するカスタムロジックを記述できます。
4.6. @ORM\Cache(usage="NONSTRICT_READ_WRITE")
- エンティティのキャッシュ戦略を指定します。
NONSTRICT_READ_WRITE
は、更新時のキャッシュの一貫性が保証されない(非同期キャッシュ)設定です。- パフォーマンス向上を目的とした設定で、リアルタイム性があまり重要でないデータに使用されます。
5. クラスの内容
phpコードをコピーするclass CustomerOrderStatus extends \Eccube\Entity\Master\AbstractMasterEntity
{
}
このクラス自体にはプロパティやメソッドの定義がありませんが、以下を継承しています:
AbstractMasterEntity
:
マスターデータ用の共通ロジックを持つ抽象クラスです。例えば、IDや名前のプロパティや、マスターデータの取得用メソッドなどが含まれている可能性があります。- 必要に応じて、このクラスにカスタムプロパティやメソッドを追加することで、
CustomerOrderStatus
特有の動作を実装できます。
このクラスの役割
CustomerOrderStatus
クラスは、顧客の注文に関連するステータス(例: “新規受付”, “キャンセル”, “発送済み” など)を管理するマスターデータエンティティです。
- データベースとの対応:
- テーブル名:
mtb_customer_order_status
- このテーブルのデータを扱うためのエンティティ。
- テーブル名:
- 機能の拡張性:
- リポジトリクラスでステータスの取得ロジックをカスタマイズ可能。
- 継承元の
AbstractMasterEntity
から、基本的な機能を引き継ぐ。
まとめ
このコードは、mtb_customer_order_status
というテーブルをマッピングするDoctrineエンティティを定義しています。このエンティティは、顧客の注文ステータスを管理するためのもので、以下の特徴があります:
- テーブル名とマッピング済み。
- 継承戦略としてSINGLE_TABLEを採用。
- ライフサイクルイベントとキャッシュ機能を利用可能。
- カスタムロジックは対応するリポジトリクラスで記述。