2017-01-31 23 views
-1

Я пытаюсь реализовать doctrine2 embeddable функция для объектов значения.Doctrine 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; 
} 

но всегда получаю ошибку, перед вызовом сохраняются и встраивание методы на экземпляре менеджера сущности.

Спасибо.

+0

Почему бы сделать столбец/свойство улица в классе пользователя? У адреса, конечно, уже есть один. – Cerad

ответ

0

Использовать getters на встроенном классе.

class Address 
{ 
    ... 
    public function getStreet(){ 
     return $this->street; 
    } 
    ... 
} 

Затем ваш метод изменяет

getStreet(Address $address){ 
    $this->street = $address->getStreet(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^