Во-первых, я предполагаю, что в вашем сводном коде type.webPath, который должен быть media.webPath? Как не имеет смысла, чтобы webPath был атрибутом типа медиа?
Структура базы данных в порядке. Однако вы не можете напрямую следовать за типом отношенийMedia.media, чтобы получить результаты для одной структуры. Отношение typeMedia.media всегда даст вам все носители этого типа (для всех структур), независимо от того, как вы перешли к типуMedia. Кроме того, до тех пор, пока ваш внешний цикл выполняет итерацию по набору медиафайлов, можно только вывести mediaType из ветки, если этот набор носителей уже упорядочен с помощью mediaType. Это не так по умолчанию при использовании struct.media.
Существуют различные способы, которыми вы могли бы это сделать. Одним из способов было бы добавить метод к вашему классу сущности Structure для получения носителя по типу. Преимущество такого подхода заключается в том, что он позволяет вам получать носитель по типу для структуры из любого места в вашем репозитории, службе, контроллере или веточке. Например:
В вашей структуре класса сущностей:
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 %}
Спасибо вам большое! Ты лучший! –
@ user2126724 вы, вероятно, заметили, но я, когда я оглянулся, понял, что сделал пару ошибок, которые я теперь исправил. – redbirdo