在FormBuilder Symfony2中对集合进行分组

时间:2013-06-18 09:27:09

标签: symfony

如何更改显示集合的顺序,并按FooBar实体中的类别对其进行分组。

$builder
    ->add('foobar', 'collection', array(
        'type' => new FooBarType()
    ));

query_builder仅适用于实体,而不适用于集合。所以它不是关于排序结果,而是关于基于FooBarType类别的分组,并按顺序显示它们。

喜欢:

  

[COLLECTION]

     

第一类名称:[列出该类别]

     

第二类名称:[列出该类别]

视图现在显示集合,前面有类别名称:

{% for db in edit_form.foobar %}
    <li>[Category: {{ db.foobar.vars.data.name }}] 
    {{ form_widget(db.value) }}</li>
{% endfor %}    

我想按类别对此进行分组。所以它们按类别名称排序。

2 个答案:

答案 0 :(得分:0)

在您的实体中,在您的oneToMany或ManyToMany注释上,您可以添加以下内容:

/**
 * @ManyToMany(targetEntity="FooBar")
 * @OrderBy({"name" = "ASC"})
 */
private $foobar;

这样,当你在模板上循环foobar时,它们会按照你定义的顺序排序和排序。

源: http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html#annref-orderby

答案 1 :(得分:0)

这会有所帮助:

{% set category = '' %}
{% for db in edit_form.foobar %}
    <li>
        {% set currentCategory = db.foobar.vars.data.category.name %}
        {% if category != currentCategory  %}
            <p>{{ currentCategory }}</p>
            {% set category = currentCategory %}
        {% endif %}                                
        {{ form_widget(db.value) }}</li>
{% endfor %}

如Joao所说,在您的实体中订购类别。