1

別のエンティティのインスタンスを返す必要があるエンティティがあります-保存されたレコード、または保存されていない場合は新しいレコード。

<?php

/**
 * @Entity
 */
class User {
    /**
     * @OneToOne(targetEntity="Basket")
     * @JoinColumn(nullable=true)
     */
    protected $activeBasket;

    public function getActiveBasket() {
        if (!isset($this->activeBasket)) {
            $this->activeBasket = new Basket($this);
            // $em->persist($this->activeBasket);
            // $em->flush();
        }
        return $this->activeBasket;
    }
}

私の問題は、この新しいバスケットを永続化するために使用する EntityManager がないことです (明らかに、モデルには必要ありません)。これを行う最善の方法についてはわかりません。$user->getActiveBasket()バスケットが以前に作成されたか新しいものかに関係なく、バスケットを呼び出して取得できるようにしたいと考えています。

これは一般的な問題であるか、またはこれを構造化するためのより良い方法があるように感じます (EntityRepository などにフックする方法があることを願っています)。これどうやってするの?

4

1 に答える 1

1

new Basket()null または設定されていない場合はa を返しません。モデル (エンティティ) は、そのプロパティの設定と取得のみを行う必要があります。

null が返されたときのロジック$user->getActiveBasket()は、別の場所にある必要があります - コントローラまたはエンティティのリポジトリ オブジェクト...

したがって、コントローラーのどこかに移動public function getActiveBasket() { ... }します。public function getActiveBasket() { return $this->activeBasket; }

$if(!$user->getActiveBasket()) {
    $user->setActiveBasket(new Basket($user));
    $this->_em->persist($user);
    $this->_em->flush();
}
// now do something with that activeBasket...
于 2012-12-06T11:13:42.127 に答える