在实体内创建和持久化新实体实例

时间:2012-12-06 10:34:37

标签: php orm doctrine-orm

我有一个实体需要返回另一个实体的实例 - 存储的记录或新的记录(如果尚未存储的话)。

<?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中连接一个或者其他东西)。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

当它为空或未设置时,我不会返回new Basket()。模型(实体)应仅用于设置和获取其属性。

$user->getActiveBasket()返回null时的逻辑应该在别处 - 在控制器或实体的reporitory对象中......

所以我会将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...