9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-03

この記事は私の理解を私の言葉で記したもので、情報が正確ではない可能性があります。
正確な情報は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
    {
    }

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

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?