gpt4 book ai didi

symfony - 用于Symfony 3.4中一对多关系的自定义 Hydrator

转载 作者:行者123 更新时间:2023-12-03 11:20:51 25 4
gpt4 key购买 nike

我有2个实体:User,Article和具有属性的多对多关系,用于描述User与Articles的交互。该属性描述了交互的类型(例如书签...)。

在这种情况下,我需要一个从Article到UserArticle具有一对多关系的中间实体(UserArticle):该属性在Article实体中称为userInteractions。

这是一个API,当我创建查询生成器时,我得到了当前登录用户喜欢并为其添加书签的Article的这种结果:

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

}

可以,但是对于javascript前端来说并不方便:我更喜欢公开 bool 字段:isLiked:true,markeded:true,otheraction:false ...,因为它更易于解析。

我以为我必须写一个定制的水龙头。我是为另一种关系(没有属性的多对多)而做的,它的工作原理像一种魅力,但在这种情况下,只有在存在0个或一个交互时才起作用。如果有2个或更多操作,则在调用父Doctrine Object水化器时收到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并未提供此方向的提示):

只需使用virtual property:

 /**      @Serializer\VirtualProperty()      
@JMS\SerializedName("user_interaction_flags") */

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

如果不需要,甚至可以从序列中排除“原始”属性。

关于symfony - 用于Symfony 3.4中一对多关系的自定义 Hydrator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49852902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com