树枝模板

时间:2015-09-07 06:06:19

标签: symfony exception twig relation

我是symfony2的新手。我的项目有两个实体

    [1] Category and
    [2] Evaluation

和类别有很多评价,所以问题是当我删除类别然后显示评价然后它显示我错误

"An exception has been thrown during the rendering of a template ("Entity was not found.") in HfAppBundle:SpecificEvaluations:index.html.twig at line 137. "

在第137行,这是内容{{evaluation.category.name}}。我也试过

    {% if evaluation.category.name is not null %}
        {{evaluation.category.name}}
    {% endif %}

但它也给我同样的错误。 任何人都可以帮忙吗?

感谢

3 个答案:

答案 0 :(得分:2)

使用树枝测试defined

{% if evaluation.category.name is defined %}
    {{evaluation.category.name}}
{% endif %}

答案 1 :(得分:1)

不检查类别名称,而是检查与评估关联的类别是否存在。

{% if evaluation.getCategory  %}
        {{evaluation.category.name}}
{% endif %}

理想情况下,当您删除链接到多个评估的类别时,应删除已删除类别与评估之间的关系。

为此,指定在删除类别时是删除所有评估,还是在删除类别时将所有相关评估的类别设置为null。 为此,在yml中,关系应定义为

manyToOne:
        user:
          targetEntity: LB\CoreBundle\Entity\User
          joinColumn:
            name: user_id
            referencedColumnName: id
            onDelete: "SET NULL"

onDelete可以是" SET NULL"或" CASCADE"取决于您是否需要将评估中的类别字段设置为null或删除与类别相关的所有评估。

修改您的代码,以便在评估中设置类别,如下所示。将分类设置为null后,您没有持久进行评估。

$evaluations = $em->getRepository('HfAppBundle:Evaluation')->findByCategory($catId); 

foreach ($evaluations as $evl) { 
$evl->setCategory(null);
//this line was missing
 $em->persist($evl);
} 

$em->flush(); 

答案 2 :(得分:1)

尝试使用default过滤器:

{{ evaluation.category.name|default('[No name]') }}