symfony 3.4中一对多关系的自定义配置器

symfony 3.4中一对多关系的自定义配置器,symfony,doctrine-orm,one-to-many,hydration,Symfony,Doctrine Orm,One To Many,Hydration,我有两个实体:用户、文章和一个多对多属性关系来描述用户与文章的交互。属性描述了交互的类型(比如书签…) 在本例中,我需要一个中间实体(UserArticle),该实体具有从Article到UserArticle的一对多关系:该属性在Article实体中称为userInteractions 这是一个API,当我创建查询生成器时,我会得到一篇文章的这种结果,该文章已被当前登录用户喜欢并标记为书签: //Article Json Object { ... userInte

我有两个实体:用户、文章和一个多对多属性关系来描述用户与文章的交互。属性描述了交互的类型(比如书签…)

在本例中,我需要一个中间实体(UserArticle),该实体具有从Article到UserArticle的一对多关系:该属性在Article实体中称为userInteractions

这是一个API,当我创建查询生成器时,我会得到一篇文章的这种结果,该文章已被当前登录用户喜欢并标记为书签:

//Article Json Object
{ 
       ...
       userInteractions : [
         {
            "type": "like"
         },
         {
            "type": "bookmark"
         }
       ]
}

这没关系,但对javascript前端来说并不方便:我更愿意公开布尔字段:isLiked:true,bookmarked:true,otheraction:false,因为它更容易解析

我想我必须写一个自定义的水合器。我这样做是为了另一种关系(多对多没有属性),它就像一个符咒一样工作,但在这种情况下,它只在有0或一个交互时工作。如果有2个或更多操作,当我调用父原则对象时,我会得到500个错误和一个通知。这是我的水合器:

class ArticleHydrator extends ObjectHydrator {
  protected function hydrateRowData(array $data, array &$result)
  {

    $hydratedResult = [];
    parent::hydrateRowData($data, $hydratedResult);
    //this call generates a notice Undefined offset: 0 at line 525 of    doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php

    $article->setUserInteractionsFlags(); 
    // works with less than 2 interactions in the left join and correctly hydrates the not-persisted booleans added to Article entity
 }
}

我试着查看物体水合器,但它是一个真正的混乱,不容易理解,我认为,可能在这种情况下,使用自定义水合器是不合适的。有什么建议吗?
如果您想使用JMS序列化程序公开该属性,只是为了使消费客户端更容易读取(尤其是不希望写回该属性,但OP没有给出此方向的提示),请感谢:

只需使用:


你甚至可以排除“原件”如果您不需要,属性将不会被序列化。

如果您仅将此信息用于javascript前端,则不应使用自定义的序列化程序,但我建议您仅自定义序列化-您使用哪种序列化?序列化由FosRestBundle与JMS一起自动进行通过注释的魔力序列化程序。它获取条令存储库返回的对象并返回json视图。你是说我应该收回序列化上下文的控制权?
 /**      @Serializer\VirtualProperty()      
@JMS\SerializedName("user_interaction_flags")    */

 public function getInteractionFlags() 
 {
     return array("like" => $this->...);
 }