有四种型号:
由DoctrineExtensions \ Taggable \ Taggable生成
在Producer存储库中,我想获得与其产品相关联的标签的生产者列表:
array(
array( // Producer
'id' => 1,
'name' => 'Producer A',
'description' => '...',
'tags' => array(
array( // Tag
'id' => 1,
'name' => 'Tag A'
),
array(...)
)
),
array(...)
)
我希望能够打字 {%for producer in producer.tags%} {{ 标签名称 }} {%endfor%}
我可以进行如下的SQL查询(这是一个临时解决方案):
$rsm = new ResultSetMapping;
$rsm->addScalarResult('id', 'id');
$rsm->addScalarResult('name', 'name');
$rsm->addScalarResult('slug', 'slug');
$rsm->addScalarResult('tags', 'tags');
$sql = 'SELECT p.id as id, p.name as name, p.slug as slug, GROUP_CONCAT(DISTINCT t.`name` ORDER BY t.`name` ASC SEPARATOR "||") as tags
FROM `es_producer` as p
LEFT JOIN `es_product` as pr ON pr.`producer_id` = p.id
LEFT JOIN `es_tagging` as tt ON tt.`resource_id` = pr.id
LEFT JOIN es_tag as t ON t.id = tt.`tag_id`
WHERE ISNULL(p.`deleted_at`)
GROUP BY p.id';
$query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
return $query->getArrayResult();
获取一个生产者字段数组,其中包含一个额外的'tags'字段作为一个带有字符串的字符串。
目前,我将所有字段映射为标量结果。这意味着我只得到一个没有我的对象的所有设施的数组。