我的表格如下:结构 -> 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 %}