0

これは私のエンティティです:

/**
* @ORM\Table(name="Animal")
* @ORM\HasLifecycleCallbacks 
*/
class Animal {

    /**
    * @var integer $id
    * 
    * @ORM\Column(name="id", type="integer", nullable=false)
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="IDENTITY")     
    */
    private $id;

    /**
    * @var localizedcontent $lctitle
    *
    * @ORM\ManyToOne(targetEntity="localizedcontent",fetch="EAGER", cascade={"persist"})
    * @ORM\JoinColumn(name="lcTitle", referencedColumnName="pkId", nullable=false)
    */
    private $lctitle;

    /**
    * @var localizedcontent $lcdescription
    *
    * @ORM\ManyToOne(targetEntity="localizedcontent",fetch="EAGER", cascade={"persist"})
    * @ORM\JoinColumn(name="lcDescription", referencedColumnName="pkId", nullable=false)
    */
    private $lcdescription;

    /**
    * @ORM\PostLoad
    */
    public function postLoad(){
      $lct = $this->lctitle;
      $lcd = $this->lcdescription;          
    }

これは私のdqlです:

SELECT a,lct FROM Animal JOIN e.lctitle lct WHERE a.id=:id

xdebug を起動すると、lcdescription がプロキシ オブジェクトであり、lctitle が存在しないことがわかります。どうしてか分かりません。この時点ではローカライズされたコンテンツがロードされていないため、postLoad イベントは時期尚早だと思います。Animal オブジェクトに関連して lctitle の値を読み取るための他のリスナーはありますか?

ありがとう

4

1 に答える 1

0

Doctrineは常にプロキシを返します。これらのクラスは、エンティティクラスを継承します。プライベートではなく保護された関係を宣言すると役立つ場合があります。

/**
* @var localizedcontent $lctitle
*
* @ORM\ManyToOne(targetEntity="localizedcontent",fetch="EAGER", cascade={"persist"})
* @ORM\JoinColumn(name="lcTitle", referencedColumnName="pkId", nullable=false)
*/
protected $lctitle;

または、ゲッターを作成して、ポストロード関数でこれを呼び出すこともできます

public function getLctitle() {
    return $this->lctitle;
}

public function getLcdescription() {
    return $this->lcdescription;
}

/**
* @ORM\PostLoad
*/
public function postLoad(){
  $lct = $this->getLctitle();
  $lcd = $this->getLcdescription();          
}
于 2013-01-26T10:15:38.933 に答える