对于我的项目,我试图使用Doctrine的继承功能。我需要代表媒体(通过不同的表格:上传文件一张,链接视频一张,等等)。不同类型的继承的多级别
但是,视频可能因供应商不同而不同(例如Youtube,Dailymotion,您将其命名)。所以,我正在考虑通过SINGLE_TABLE
继承来做一个适合视频表的另一个继承。
但是,当我宣布我的实体,似乎如果我添加在AbstractVideo
实体,它扩展了AbstractMedia
实体的SINGLE_TABLE
继承批注,则Video
表,从未创建(也不能检测)。下面是这两个实体的一个片段:
<?php
namespace Acme\Demo\Entity;
use Datetime;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="Media")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
*/
abstract class AbstractMedia
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
// some other fields
}
/**
* @ORM\Entity
* @ORM\Table(name="Video")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="provider", type="string")
* @ORM\DiscriminatorMap({})
*/
abstract class AbstractVideo extends AbstractMedia
{
/** @ORM\Column(type="string") */
private $name;
// some other fields
}
我已经尝试过有一个映射实体的Foo
实体,延伸AbstractVideo
,但后来当我试图坚持的东西,它说,它不是一个有效的实体。
任何想法,还是我真的应该避免这种深度继承?谢谢
Doctrine ORM – Ocramius