この記事は私の理解を私の言葉で記したもので、情報が正確ではない可能性があります。
正確な情報はDoctrineのドキュメントなどを参考にしてください。
Doctrineのドキュメント
ポリモーフィック関連について書かれている記事
EC-CUBE4の開発で discriminator_type
のカラムをよく見かけるが、あまり深く考えないで使っていました。
新規テーブルを追加するときに少しハマったので調べてみました。
discriminator_type
の用途
discriminator_type
はEntityを継承して拡張するときに利用される
例えばHogeクラスを継承したPiyoクラスを作成する場合は discriminator_type
に hoge
, fuga
などが入り、管理される
EC-CUBE4での discriminator_type
関連の設定
discriminator_type
に関する設定はEntityにアノテーションで設定できる。
以下のBlockエンティティの例では@ORM\DiscriminatorColumn()
がそれに当たる。
カラム内の文字列は @ORM\@DiscriminatorMap()
で設定できる。
EC-CUBE4の場合は @ORM\@DiscriminatorMap()
が省略されており、省略した場合にはクラス名が小文字になったものが設定される。
例えば以下の例では block
が設定される。
/**
* 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
{
}
間違っているところがあれば指摘していただけますと助かります。