0

我想从 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,因为并非所有潜在客户都关联了 Tour,此字段可以为空。

然后我像这样打印:

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

问题出现在lead.tour 有一个数值的地方,但是这个值在tours 表中不存在(因为它已经被删除了)。我得到“找不到实体”。引用数据库中不存在的lead.tour 的异常。

我试图用is defined检查lead.tour ,不为空但没有任何作用。

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

有什么方法可以检查 Twig 中的对象或 DQL 中的左连接?

4

1 回答 1

0

左连接将解决并非所有潜在客户都有游览的问题。

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

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

于 2013-07-31T15:24:26.360 回答