我正在尝试为值对象实现doctrine2 embeddable 功能。
这是一个简单的代码片段,略有修改from doctrine official documentation:
/** @Entity */
class User
{
/** @Embedded(class = "Address") */
protected $address;
/** @Column(type = "string") */
protected $street;
}
/** @Embeddable */
class Address
{
/** @Column(type = "string") */
protected $street;
/** @Column(type = "string") */
protected $postalCode;
/** @Column(type = "string") */
protected $city;
/** @Column(type = "string") */
protected $country;
}
当我尝试从嵌入对象访问属性时,我得到“无法访问受保护属性”错误 - 这是预期的。 可嵌入对象应仅由其基本实体类读取,并且不会被修改,因为它们是不可变的(遵循域驱动设计指南)。 我不明白的是,我如何阅读他们的属性,因为他们是私人/受保护的?这里有任何PHP魔法吗?我试图使用不同的吸气剂,如:
getStreet(Address $address){
$this->street = $address->street;
}
但在实体管理器实例上调用persist和flush方法之前总是会出错。
感谢。
答案 0 :(得分:0)
在嵌入式课程中使用getters
。
class Address
{
...
public function getStreet(){
return $this->street;
}
...
}
然后,您的方法会更改
getStreet(Address $address){
$this->street = $address->getStreet();
}
答案 1 :(得分:0)
如果要从用户处检索街道值,则应在User类中创建一个getter方法,该方法在内部可以访问该地址并执行以下操作:
class User
{
public getAddressStreet() {
$this->address->getStreet();
}
}
或类似的东西。