Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

EC-CUBE4のDBのそれぞれのテーブルにあるdiscriminator_typeとは何なのか

More than 1 year has passed since last update.

この記事は私の理解を私の言葉で記したもので、情報が正確ではない可能性があります。
正確な情報はDoctrineのドキュメントなどを参考にしてください。

Doctrineのドキュメント
ポリモーフィック関連について書かれている記事

EC-CUBE4の開発で discriminator_type のカラムをよく見かけるが、あまり深く考えないで使っていました。
新規テーブルを追加するときに少しハマったので調べてみました。

discriminator_type の用途

discriminator_type はEntityを継承して拡張するときに利用される
例えばHogeクラスを継承したPiyoクラスを作成する場合は discriminator_typehoge, fuga などが入り、管理される

EC-CUBE4での discriminator_type 関連の設定

discriminator_type に関する設定はEntityにアノテーションで設定できる。
以下のBlockエンティティの例では@ORM\DiscriminatorColumn() がそれに当たる。
カラム内の文字列は @ORM\@DiscriminatorMap() で設定できる。
EC-CUBE4の場合は @ORM\@DiscriminatorMap() が省略されており、省略した場合にはクラス名が小文字になったものが設定される。
例えば以下の例では block が設定される。

src/Eccube/Entity/Block.php
    /**
     * Block
     *
     * @ORM\Table(name="dtb_block", uniqueConstraints={@ORM\UniqueConstraint(name="device_type_id", columns={"device_type_id", "file_name"})})
     * @ORM\InheritanceType("SINGLE_TABLE")
     * @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
     * @ORM\HasLifecycleCallbacks()
     * @ORM\Entity(repositoryClass="Eccube\Repository\BlockRepository")
     */
    class Block extends \Eccube\Entity\AbstractEntity
    {
    }

間違っているところがあれば指摘していただけますと助かります。

okazy
EC-CUBEの開発とかしてます。
https://www.okazy.org/
ec-cube
日本No.1ECオープンソースのEC-CUBEのコミッターやユーザーのコミュニティです。
https://www.ec-cube.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away