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时的逻辑$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 回答