簡體   English   中英

Symfony2 / Doctrine-如何將額外字段附加到獲取的對象

[英]Symfony2 / Doctrine - How to append an extra field to fetched objects

現在的情況

有四種模型:

制片人

  • ID
  • 名稱
  • 描述
  • 產品(OneToMany->產品)

產品實現DoctrineExtensions \\ Taggable \\ Taggable

  • ID
  • 名稱
  • 生產者(ManyToOne->生產者)
  • 標簽

標簽和標簽

由DoctrineExtensions \\ Taggable \\ Taggable生成

目標

在生產者存儲庫中,我想獲取帶有與其產品相關的標簽的生產者列表:

array(
    array( // Producer
        'id' => 1, 
        'name' => 'Producer A', 
        'description' => '...', 
        'tags' => array(
            array( // Tag
                'id' => 1,
                'name' => 'Tag A'
            ),
            array(...)
        )
    ),
    array(...)
)

並且我希望能夠為生產者標簽中的標簽鍵入{%for tag。{{tag.name}} {%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();

並獲得帶有附加“標簽”字段的生產者字段數組,作為固定字符串。

  • 由於我想將字段映射到相應的對象,並且標簽字段不屬於Producer實體,我如何將該字段映射到對象?
  • 如何將標簽映射為實體

目前,我將所有字段都映射為標量結果。 這意味着我只會得到一個數組,而沒有對象的所有功能。

您可以使用自定義Hydrator來完成此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM