Symfony 单域多域关联上的循环

Symfony 单域多域关联上的循环,symfony,doctrine-orm,symfony-2.3,Symfony,Doctrine Orm,Symfony 2.3,我的表格如下: 结构->一家公司->媒体 媒体->多通->类型媒体 浏览结构必须输入每种类型的媒体 例如: 照片: img,img,img,img 视频: 视频,视频,视频 我尝试了各种方法,一个for循环在另一个for循环中,但是typeMedia(照片、视频..)永远被复制 这里是代码,但它是错误的 {% for media in structure.media %} {% for type in media.typeMedia.media %} <

我的表格如下: 结构->一家公司->媒体 媒体->多通->类型媒体

浏览结构必须输入每种类型的媒体

例如:

照片:

img,img,img,img

视频:

视频,视频,视频

我尝试了各种方法,一个for循环在另一个for循环中,但是typeMedia(照片、视频..)永远被复制

这里是代码,但它是错误的

{% for media in structure.media %}
      {% for type in media.typeMedia.media %}
            <h3>{{ type.typeMedia.name }}</h3>
            <hr/>
            <img src="{{ type.webPath | imagine_filter('thumb', true) }}" />
      {% endfor %}
{% endfor %}
{%用于structure.media%}
{media.typeMedia.media%中的类型为%1}
{{type.typeMedia.name}

{%endfor%} {%endfor%}
我该怎么修理


我需要更改数据库结构?

首先,我猜在您的twig code type.webpage中应该是media.webpage?因为网页作为媒体类型的属性没有意义

数据库结构良好。但是,您不能直接按照关系typeMedia.media获取单个结构的结果。typeMedia.media关系将始终为您提供该类型的所有媒体(对于所有结构),无论您如何导航到typeMedia。此外,只要您的外部循环在一组媒体上迭代,只有当该组媒体已按mediaType排序时,才可能从twig按mediaType输出。默认情况下,使用structure.media时并非如此

有多种方法可以做到这一点。一种方法是向结构实体类添加一个方法,以按类型获取媒体。这种方法的优点是,它使您能够从代码库、服务、控制器或细枝中的任何位置按类型获取结构的介质。例如:

在结构实体类中:

public function getMediaByTypeName()
{
    $mediaByType = array();

    foreach ($this->media as $aMedia)
    {
        $typeName = $aMedia->getTypeMedia()->getName();
        if (!array_key_exists($typeName, $mediaByType)) $mediaByType[$typeName] = array();
        $mediaByType[$typeName][] = $aMedia;
    }

    return $mediaByType;
}
在你的树枝上:

{% for typeName, media in structure.mediaByTypeName %}
    <h3>{{ typeName }}</h3>
    <hr/>
    {% for aMedia in media %}
       <img src="{{ aMedia.webPath | imagine_filter('thumb', true) }}" />
    {% endfor %}
{% endfor %}
{%用于typeName,结构中的媒体。mediaByTypeName%}
{{typeName}}

{媒体%中的aMedia为%1} {%endfor%} {%endfor%}
非常感谢!你是最棒的@用户2126724您可能注意到了,但当我回顾这一点时,我意识到我犯了几个错误,现在我已经纠正了这些错误。