【发布时间】:2013-07-31 20:50:04
【问题描述】:
我想显示一个表,其中包含来自 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 的异常。
我尝试检查lead.tour 已定义,不为空,但没有任何效果。
Twig 不支持类型检查,所以没有基本功能可以检查lead.tour 是对象还是类似的。
有什么方法可以检查 Twig 中的对象或 DQL 中的左连接?
【问题讨论】:
-
我认为您需要在这里回归基础。应该不可能将引导点指向不存在的记录。当潜在客户指向它时尝试删除游览中的记录应该会引发错误。使用教义:模式:更新将为您生成必要的 sql 约束。同样,您的主要实体中绝对不需要 tourId。 Doctrine 2 是一个 ORM 系统,而不是表网关或活动记录。最好按照 Doctrine 2 期望的方式阅读手册并设置模型。或者使用 Doctrine 2 以外的东西。
-
谢谢。是的,在我的模型中可能存在这种类型的关系:一些记录具有关联的实体,而另一些则没有。
标签: symfony doctrine-orm twig