【发布时间】:2015-08-25 20:29:03
【问题描述】:
对于我的项目,我正在尝试使用 Doctrine 的继承功能。我需要代表媒体(通过不同的表格:一张用于上传文档,一张用于链接视频,......等等)。
但是,视频可能因提供商而异(例如 Youtube、Dailymotion 等)。因此,我正在考虑通过SINGLE_TABLE 继承进行另一个继承,适合 Video 表。
但是,当我声明我的实体时,似乎如果我在扩展AbstractMedia 实体的AbstractVideo 实体上添加SINGLE_TABLE 继承注释,则永远不会创建Video 表(也不会检测到) .这是这两个实体的 sn-p :
<?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 目前不支持混合继承
标签: php doctrine-orm multiple-inheritance single-table-inheritance