Doctrine2通过魔术方法定义属性

时间:2013-08-08 00:16:46

标签: php symfony doctrine-orm

使用Doctrine,是否可以使用魔术方法映射到实际不存在的属性?

我正在使用YAML进行映射。

例如,如果我想映射到名为“demo”的属性,但SomeClass :: $ demo实际上并不存在。我想要__get(),__ set(),__ isset()和__call()的某种组合来处理$ demo(和getDemo()和setDemo())并用它们做其他事情。

我已尝试设置此功能,但我收到错误:

Uncaught exception 'ReflectionException' with message 'Property My\Bundle\DemoBundle\Entity\SomeClass::$demo does not exist'

我不确定ReflectionProperty是否有什么特别的东西导致它错过了我的魔法,或者我是否可能错过了一个神奇的功能。但是,据我所知,ReflectionProperty应该与它们互动。

有什么想法吗?

更新:

经过进一步调查,看起来ReflectionProperty构造函数会抛出异常并且不会触发魔术方法。

是否有其他人知道将Doctrine映射到动态属性的方法?

感谢。

更新2:

举例说明我正在努力实现的目标。

基本上,我有一个通用的User对象,它只包含处理实际用户所需的基本属性(角色,密码,盐,用户名等)。但是,我希望能够扩展此对象以添加特定于应用程序和用户的元数据。

所以,我说创建一个论坛包。然后,我可以动态地连接与用户相关的元数据,以便与论坛一起使用。我不想直接将它放在用户包中,因为那时用户包变得不那么灵活了。

如果我能以某种方式动态地向用户注入新数据,它可以全部加载到用户的单个查询中,而不必在单独的查询中加载。我知道还有其他方法可以做到这一点,我已经探索过,甚至在有限的范围内使用。但是,如果我可以动态创建这些关联,那就更好了,这实际上不应该是一个飞跃的难度。

1 个答案:

答案 0 :(得分:0)

如果您不需要搜索这些动态属性,则只需将名为data的属性添加到您的实体并将其映射到doctrine数组类型。现在做你的majic东西并将动态属性存储在数据数组中。

第二种方法可能就是这样:http://symfony.com/doc/current/cookbook/doctrine/resolve_target_entity.html。对于每个安装,您可以为管理员提供自定义实体。

但只要您不需要直接查询动态属性,那么第一种方法效果很好。