我想显示一个包含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中保留连接?
答案 0 :(得分:0)
左连接将解决并非所有潜在客户都参加巡视的问题。
SELECT lead,tour
FROM BuvMarketplaceBundle:Lead lead
LEFT JOIN lead.tour tour
正如我的评论所指出的那样,在正确设置的Doctrine 2模型中,导致指向不存在的巡回记录是不可能的。