symfony 3.4中一对多关系的自定义配置器
我有两个实体:用户、文章和一个多对多属性关系来描述用户与文章的交互。属性描述了交互的类型(比如书签…) 在本例中,我需要一个中间实体(UserArticle),该实体具有从Article到UserArticle的一对多关系:该属性在Article实体中称为userInteractions 这是一个API,当我创建查询生成器时,我会得到一篇文章的这种结果,该文章已被当前登录用户喜欢并标记为书签: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
//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->...);
}