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

and*_*saf 5 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;
Run Code Online (Sandbox Code Playgroud)

以下代码适用于这两种情况.如果存在数据库条目,如果不存在

{{ item.product.productId }}
Run Code Online (Sandbox Code Playgroud)

但是当我调用需要从数据库加载的字段时,我"找不到实体".例外.由于Doctrine Proxies,我知道的所有树枝测试都不适合检查

{{ item.product.name }}
{{ item.product is null }}
{{ item.product is empty }} etc.
Run Code Online (Sandbox Code Playgroud)

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

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

    return $this->product;
}
Run Code Online (Sandbox Code Playgroud)

Mak*_*hin 0

@andreysaf,尝试默认过滤器。

{{ item.product.name|default }}
Run Code Online (Sandbox Code Playgroud)

如果不存在产品,它可以防止抛出异常。事实上,它打印传递的字符串(默认情况下字符串是空行)。