【问题标题】:Check joined entity from Twig in Symfony2在 Symfony2 中检查来自 Twig 的连接实体
【发布时间】: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


【解决方案1】:

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

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

正如我的评论所表明的,在正确设置的 Doctrine 2 模型中,lead 不可能指向不存在的游览记录。

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多