2017-01-31 7 views
-1

私はdoctrine2 埋め込み可能な値オブジェクト用の機能を実装しようとしています。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

を変更するのはなぜ自分のユーザークラスのストリートと呼ばれる列/プロパティになるだろうか?アドレスにはすでに1つがあります。 – Cerad

答えて

0

埋め込みクラスにgettersを使用してください。その後

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

、あなたの方法は

getStreet(Address $address){ 
    $this->street = $address->getStreet(); 
} 
関連する問題