Doctrine orm 继承与联想

Doctrine orm 继承与联想,doctrine-orm,Doctrine Orm,我需要这样定义的媒体实体: 类别: 名称:字符串25 段塞:字符串25 说明:文本 文档:与文档关联 Document=@ORM\InheritanceTypeSINGLE\u表: 类别:关联类别和鉴别器 标题:字符串50 说明:文本 段塞:字符串50 例如,类别: 视频: youtube 每日运动 维梅奥 照片: 现场照片 云图 文件: 地区配置文件 云文件 类别的文档将是document\Youtube等的实例 是否可以使用列作为继承的关联字段和鉴别器?似乎没有提到这方面的限制 然而,由于您

我需要这样定义的媒体实体:

类别:

名称:字符串25 段塞:字符串25 说明:文本 文档:与文档关联 Document=@ORM\InheritanceTypeSINGLE\u表:

类别:关联类别和鉴别器 标题:字符串50 说明:文本 段塞:字符串50 例如,类别: 视频:

youtube 每日运动 维梅奥 照片:

现场照片 云图 文件:

地区配置文件 云文件 类别的文档将是document\Youtube等的实例

是否可以使用列作为继承的关联字段和鉴别器?

似乎没有提到这方面的限制

然而,由于您想要的列是一个关系,那么鉴别器映射将依赖于DB发布的ID,这在我看来并不好

但您仍然可以让Doctrine为您处理鉴别器:只需声明一个您永远不会直接使用的鉴别器列,声明其映射,然后依靠实体逻辑保持类别和文档类型之间的一致性:

/**
 * @ORM\Entity(repositoryClass="...
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({
 *     "youtube"="Youtube",
 *     "dailymotion"="Dailymotion",
 *     ...
 * })
*/
abstract class Document {

    /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="documents")
    */
    protected $category;
    ...
    //this is to be called by children that all share a category field
    public function setCategory(Category $c) {
        $class = get_class($this);
        if (strtolower($c->getName()) !== strtolower(substr($class, strrpos($class, '\\') + 1))) {
            throw new \LogicException("Cannot bind " . $class . " to category " . $c->getName());
        }
        $this->category = $c;
        return $this;
    }