使用Doctrine和Symfony创建类似多态的关联

时间:2016-04-26 19:47:47

标签: orm doctrine-orm symfony

我正在尝试使用Fileable特性,该特性将根据下面提到的文件实体为实体提供CRUD文件的方法。

在阅读Doctrine上的文档并搜索互联网之后,我能找到的最好的是Inheritance Mapping,但这些都要求子类扩展超类,这是不理想的,因为当前的实体已经扩展了其他类。我可以拥有FileFoo实体和FileBar实体,但这太乱了,需要额外加入(super - > sub - > entity

或者,我可以拥有一个文件实体,其中包含许多实体列(因此foo_id对象为Foobar_id对象为bar,依此类推)但这会变得混乱,并且需要为我想要添加Fileable特征的每个实体添加一个新列。

所以问题: 我在考虑如何错误地保存数据吗? 我错过了Doctrine / Symfony中的一些功能/功能吗? 如果我要分配Doctrine来添加这个功能,你认为我会添加这样的功能吗?我应该在哪里看看?

<?php
/**
 * File
 *
 * @ORM\Table()
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks()
 */
class File
{
    /**
     * @var integer
     *
     * @ORM\Column(type="integer")
     * @ORM\Id()
     * @ORM\GeneratedValue()
     */
    protected $id;
    /**
     * @var string
     *
     * @ORM\Column(type="string")
     */
    protected $entityName;
    /**
     * @var string
     *
     * @ORM\Column(type="string")
     */
    protected $entityId;
...

2 个答案:

答案 0 :(得分:1)

我使用traits中定义的继承完成了类似的事情,它与接口一起,基本上给了我多重扩展会给出的内容。

答案 1 :(得分:1)

看看embeddables或者你可以使用特征。