在使用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中的错误或功能,那么当我认为它可能为空时,我会得到一个“假实体”。