现在的情况
有四种型号:
制片人
- ID
- 姓名
- 描述
- 产品(OneToMany -> 产品)
产品实现 DoctrineExtensions\Taggable\Taggable
- ID
- 姓名
- 生产者(多对一 -> 生产者)
- 标签
标记和标记
由 DoctrineExtensions\Taggable\Taggable 生成
目标
在生产者存储库中,我想获取生产者列表以及与其产品关联的标签:
array(
array( // Producer
'id' => 1,
'name' => 'Producer A',
'description' => '...',
'tags' => array(
array( // Tag
'id' => 1,
'name' => 'Tag A'
),
array(...)
)
),
array(...)
)
我希望能够在 producer.tags %} {{ tag.name }} {% endfor %} 中输入 {% for tag
问题
我可以进行如下 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字段不属于Producer实体,我如何将该字段映射到对象?
- 如何将标签映射为实体
目前,我将所有字段映射为标量结果。这意味着我只得到一个没有我对象的所有设施的数组。