Doctrine orm 继承与联想
我需要这样定义的媒体实体: 类别: 名称:字符串25 段塞:字符串25 说明:文本 文档:与文档关联 Document=@ORM\InheritanceTypeSINGLE\u表: 类别:关联类别和鉴别器 标题:字符串50 说明:文本 段塞:字符串50 例如,类别: 视频: youtube 每日运动 维梅奥 照片: 现场照片 云图 文件: 地区配置文件 云文件 类别的文档将是document\Youtube等的实例 是否可以使用列作为继承的关联字段和鉴别器?似乎没有提到这方面的限制 然而,由于您想要的列是一个关系,那么鉴别器映射将依赖于DB发布的ID,这在我看来并不好 但您仍然可以让Doctrine为您处理鉴别器:只需声明一个您永远不会直接使用的鉴别器列,声明其映射,然后依靠实体逻辑保持类别和文档类型之间的一致性:Doctrine orm 继承与联想,doctrine-orm,Doctrine Orm,我需要这样定义的媒体实体: 类别: 名称:字符串25 段塞:字符串25 说明:文本 文档:与文档关联 Document=@ORM\InheritanceTypeSINGLE\u表: 类别:关联类别和鉴别器 标题:字符串50 说明:文本 段塞:字符串50 例如,类别: 视频: youtube 每日运动 维梅奥 照片: 现场照片 云图 文件: 地区配置文件 云文件 类别的文档将是document\Youtube等的实例 是否可以使用列作为继承的关联字段和鉴别器?似乎没有提到这方面的限制 然而,由于您
/**
* @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;
}