ECCUBE4 | 注文ステータス | 【福岡】LP・ランディングページ・ホームページ制作|セルピー

ECCUBE4 | 注文ステータス

<?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エンティティを定義しています。このエンティティは、顧客の注文ステータスを管理するためのもので、以下の特徴があります:

  1. テーブル名とマッピング済み。
  2. 継承戦略としてSINGLE_TABLEを採用。
  3. ライフサイクルイベントとキャッシュ機能を利用可能。
  4. カスタムロジックは対応するリポジトリクラスで記述。