對於我的項目,我試圖使用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