我正在创建一个代表MenuItem
的实体类。这可以与实现SluggableInterface
的任何类具有一对一的关系。
由于MenuItem
应该能够与任何SluggableInterface
类(现有的和未来的)相关,我不能指定正常的学说关系,因为没有特定的相关实体。
我想出了一些可能的解决方案,但它们有缺点:
创建一个ObjectReference
实体来保存相关对象的类名和ID。然后,该类将具有getObject()
方法来构造并返回必要的对象。 这里的缺点是你不能(干净地,至少)从实体内部访问学说。
创建object_reference
类型以将对象转换为包含类名和ID的字符串。 问题再次出现在Type
类中访问doctrine以检索对象。
我还没有尝试过这个,但创建了一个听取教条事件的类,然后用自定义注释检查字段,并在那里进行Object-> String和反之亦然转换。
在我开始调查#3之前,有没有人知道“正确”或替代方法呢?
答案 0 :(得分:0)
我使用了 @Cerad 关于使用类表继承的建议(之前使用过映射的超类)。
由于我有一个大多数实体扩展的类(BaseEntity
),包括那些实现SluggableInterface
的类,我在MenuItem
中建立了一个BaseEntity
对象的关系1}} - 这允许使用任何子类。
为了确保只有SluggableInterface
的实例相关,我在设置器中输入提示(例如public function setRelatedEntity(SluggableInterface $entity)...
。