从关系中获取实体时的Doctrine2 EntityNotFoundException

时间:2013-12-13 10:34:21

标签: symfony doctrine-orm

在使用Doctrine2的Symfony2项目中。我有一个与促销实体1-N相关的牵头实体。领导者是否有相关的促销活动。

//Lead.php
...

/**
 * @var string $promotionCode
 * @ORM\Column(name="promotion_code", type="string", length=16)
 */
 private $promotionCode;

/**
 * @var Promotion $promotion
 * @ORM\ManyToOne(targetEntity="Promotion")
 * @ORM\JoinColumn(name="promotion_code", referencedColumnName="id")
 */
private $promotion;
...

public function setPromotionCode($promotionCode) {
  $this->promotionCode = $promotionCode;
}
public function getPromotionCode() {
  return $this->promotionCode;
}
public function setPromotion($promotion) {
  $this->promotion = $promotion;
}
public function getPromotion() {
  return $this->promotion;
}

当我想获得相关促销(如果有的话)时,你可以

$lead = $em->getRepository('BuvMarketplaceBundle:Lead')->find($id);
$promotion = $lead->getPromotion();

如果领导有促销,这是可以的。但是如果不是这个代码返回一个Promotion“实体”,但当我尝试使用时,如果我得到一个EntityNotFoundException。

所以我必须测试相关促销是否存在:

if (is_object($promotion) && method_exists($promotion, 'getDiscount')) {
  try {
    $promotion->getDiscount();
  } catch(EntityNotFoundException $e) {
    $promotion = null;
  }
} else {
  $promotion = null;
}

我知道我可以在Promotion Repository中使用findBy,也可能是另一种检查它的方法。

但问题是,如果这是Doctrine2中的错误或功能,那么当我认为它可能为空时,我会得到一个“假实体”。

0 个答案:

没有答案