我有一个实体需要返回另一个实体的实例 - 存储的记录或新的记录(如果尚未存储的话)。
<?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中连接一个或者其他东西)。我怎么能这样做?
答案 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...