检查Symfony2中Twig的加入实体

时间:2013-07-31 10:59:11

标签: symfony doctrine-orm twig

我想显示一个包含Doctrine DQL查询中某些实体关系的表。

我的“主要”实体Lead与Tour有如下关系:

class Lead {
  /**
   * @var integer $tourId
   * @ORM\Column(name="`tour_id`", type="integer")
   */
  private $tourId;

  /**
   * @var Tour $tour
   * @ORM\ManyToOne(targetEntity="Tour")
   * @ORM\JoinColumn(name="tour_id", referencedColumnName="id")
   */
  private $tour;

  ...
}

我使用Doctrine2 DQL从DB获取数据:

SELECT l, c
FROM BuvMarketplaceBundle:Lead l '
JOIN l.client c

请注意,我没有加入Tour,因为并非所有Leads都有Tour关联,此字段可以为null。

然后我这样打印:

{% for lead in leads %}
  {{ lead.id }}
  {% if lead.tour %}
    {{ lead.tour.name }}
  {% endif %}
{% endfor %}

问题来自于lead.tour有一个数值,但是这个值在tour表中不存在(因为它已被删除)。我得到了“未找到实体”。引用DB中不存在的lead.tour的异常。

我尝试检查lead.tour,已定义不为空但没有任何效果。

Twig不支持类型的查询,因此没有可用于检查lead.tour是对象或类似的基本函数。

有没有办法可以从Twig中检查对象或从DQL中保留连接?

1 个答案:

答案 0 :(得分:0)

左连接将解决并非所有潜在客户都参加巡视的问题。

SELECT lead,tour
FROM BuvMarketplaceBundle:Lead lead
LEFT JOIN lead.tour tour

正如我的评论所指出的那样,在正确设置的Doctrine 2模型中,导致指向不存在的巡回记录是不可能的。