Symfony2 Twig获取子实体的总数

时间:2014-06-27 14:53:12

标签: php symfony twig

存在以下实体:农场,谷仓和动物。农场可以有许多谷仓和谷仓很多动物。

在TWIG模板中显示Farm时,也应显示动物数量。

这样做的最佳方式是什么?

我创建了一个TWIG扩展程序,可以让我轻松显示数据库。

public function totalFieldFilter($data, $getField='getTotal') {
    $total = count($data->$getField());
    return $total;
}

在我的模板中,我会使用{{farm | totalField('getBarns')}},我可以轻松扩展它以编写另一个自定义函数,如下所示:

public function totalFieldFilter($farm) {
    $total = 0;
    foreach($farm->getBarns() AS $barn) {
        $total += count($barn->getAniamls());
    }
    return $total;
}

虽然这样可行,但是有更好的方法可以使它更通用吗?如果我想算上动物的腿怎么办?或者谷仓有多少门,我每次都要写一个自定义的TWIG扩展名。

2 个答案:

答案 0 :(得分:3)

使用实体访问者:

{% for farm in farms %}

  {{ farm.name }}

  {% set barns = farm.getBarns() %}

  Barns count = {{ barns|length }}

  {% for barn in barns %}

    {% set animals = barn.getAnimals() %}

    {{ barn.name }} animals count : {{ animals|length }}

  {% endfor %}

{% endfor %}

答案 1 :(得分:2)

您正在寻找length filter

与数组一起使用时,length将为您提供项目数。因此,如果您的数组是farm.barns,则可以使用{{ farm.barns|length }}