doctrine2检查DB中存在OneToOne相关实体

时间:2014-08-29 17:31:52

标签: symfony doctrine-orm twig

实体声明了OneToOne关系

/**
 * @var \Backend\SalesBundle\Entity\SalesOrder
 *
 * @ORM\OneToOne(targetEntity="Backend\CatalogBundle\Entity\CatalogProduct")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="product_id", referencedColumnName="product_id")
 * })
 */
private $product;

以下代码适用于这两种情况。如果存在数据库条目,并且它没有

{{ item.product.productId }}

但是当我呼叫需要从数据库加载的字段时,我已经没有找到实体。"例外。由于Doctrine Proxies

,我知道的所有树枝测试都不适合检查
{{ item.product.name }}
{{ item.product is null }}
{{ item.product is empty }} etc.

有没有优雅的方法来检查相关实体是否存在?我可以这样做,但对我来说不够好,因为我需要打电话给{{item.product.productId}}

public function getProduct()
{
    try {
        $sku = $this->product->getSku();
    } catch (\Doctrine\ORM\EntityNotFoundException $e) {
        return null;
    }

    return $this->product;
}

1 个答案:

答案 0 :(得分:0)

@andreysaf,尝试默认过滤器。

{{ item.product.name|default }}

如果没有产品,它可以防止抛出异常。 实际上它打印传递的字符串(默认字符串是空行)。