我正在尝试使用Fileable特性,该特性将根据下面提到的文件实体为实体提供CRUD文件的方法。
在阅读Doctrine上的文档并搜索互联网之后,我能找到的最好的是Inheritance Mapping,但这些都要求子类扩展超类,这是不理想的,因为当前的实体已经扩展了其他类。我可以拥有FileFoo
实体和FileBar
实体,但这太乱了,需要额外加入(super
- > sub
- > entity
)
或者,我可以拥有一个文件实体,其中包含许多实体列(因此foo_id
对象为Foo
,bar_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;
...
答案 0 :(得分:1)
我使用traits中定义的继承完成了类似的事情,它与接口一起,基本上给了我多重扩展会给出的内容。
答案 1 :(得分:1)
看看embeddables或者你可以使用特征。