任何对象(任何类)的学说关系

时间:2014-02-03 13:15:48

标签: php symfony doctrine-orm

我正在创建一个代表MenuItem的实体类。这可以与实现SluggableInterface的任何类具有一对一的关系。

由于MenuItem应该能够与任何SluggableInterface类(现有的和未来的)相关,我不能指定正常的学说关系,因为没有特定的相关实体。

我想出了一些可能的解决方案,但它们有缺点:

  1. 创建一个ObjectReference实体来保存相关对象的类名和ID。然后,该类将具有getObject()方法来构造并返回必要的对象。 这里的缺点是你不能(干净地,至少)从实体内部访问学说。

  2. 创建object_reference类型以将对象转换为包含类名和ID的字符串。 问题再次出现在Type类中访问doctrine以检索对象。

  3. 我还没有尝试过这个,但创建了一个听取教条事件的类,然后用自定义注释检查字段,并在那里进行Object-> String和反之亦然转换。

  4. 在我开始调查#3之前,有没有人知道“正确”或替代方法呢?

1 个答案:

答案 0 :(得分:0)

我使用了 @Cerad 关于使用类表继承的建议(之前使用过映射的超类)。

由于我有一个大多数实体扩展的类(BaseEntity),包括那些实现SluggableInterface的类,我在MenuItem中建立了一个BaseEntity对象的关系1}} - 这允许使用任何子类。

为了确保只有SluggableInterface的实例相关,我在设置器中输入提示(例如public function setRelatedEntity(SluggableInterface $entity)...