Loop over OneToMany - ManyToOne association



我的表格如下:结构 -> onetomany->媒体媒体 ->多人 -> typemedia

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

例如:

照片:

img,img,img,img ..

视频:

视频,视频,视频...

...

我以各种方式尝试了一个循环内部循环的循环,但是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 %}

我该如何修复?

我需要更改数据库结构?

首先,我猜想在您的树枝代码类型中。因为WebPath成为媒体类型的属性是没有意义的吗?

数据库结构很好。但是,您无法直接遵循关系类型。Media以获取单个结构的结果。typemedia.media的关系始终为您提供该类型的所有媒体(对于所有结构),无论您如何导航到类型障碍。此外,只要您的外循环在一组媒体上迭代,只有在介体已经按照介体订购的一组介质的情况下,只能通过TWIG输出。默认情况下,当使用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 %}

相关内容

  • 没有找到相关文章

最新更新