Doctrine Embeddables共享一个共同的界面

时间:2014-12-23 20:35:22

标签: php doctrine-orm doctrine

使用Doctrine Embeddables时,你必须在属性上声明一个类......

/** @Entity */
class User
{
    /** @Embedded(class = "Address") */
    private $address;
}

/** @Embeddable */
class Address
{
}

如果您的属性拥有实现接口的类,会发生什么。所以例如...我有一个名为Monthly或Weekly的类,它实现了一个名为RecurrenceInterface的接口,我的实体看起来像这样......

/** @Entity */
class Subscription
{
    /** @var RecurrenceInterface */
    private $recurrence;
}

/** @Embeddable */
class Monthly implements RecurrenceInterface
{
}

如何将实现接口的内容声明为Embeddable?

谢谢!

1 个答案:

答案 0 :(得分:0)

医生教程说:“可嵌入对象是不是实体本身的类”。类,没有别的。.

作为解决方案之一,您可以像这样将序列化的对象存储在您的实体中

PartitionId

在这种情况下,学说 /** * @var Settings\SettingsInterface * @ORM\Column(name="settings", type="object") */ private $settings; 并不关心存储对象的序列化/反序列化。

此外,您在类中的setters,getters,construct等上仍具有类型提示。

t cares what you store there, and you don

此解决方案有许多明显的缺点,例如,在更改可序列化对象时