为什么 Doctrine 在获取时会返回一个键中带有间隙的关联数组?



我正在用Symfony构建一个应用程序。 我有一个教义实体,其中包含(除其他属性外)另一个实体的集合(形成OneToMany关联)。

Class OuterEntity
{
/**
* @ORMOneToMany(targetEntity="InnerEntity", mappedBy="outer", cascade={"persist", "remove"})
*/
private $inners;
}

在我的OuterEntityController中,在updateOuterEntityAction方法中,我执行以下操作:

  • 解析请求
  • 从数据库获取更新的外部
  • 根据要求修改
  • 在实体管理器上调用flush()
  • 在外部实体存储库上调用findAll()
  • 在 JsonResponse 中将外部实体列表返回给客户端,以便通知它数据库的新状态。由于我使用JsonResponse,所以我让Symfony进行序列化(很可能是使用json_encode)。

一切都很好,除了我删除关联中的一个或多个InnerEntity。问题不是来自删除,而是来自返回的 json 格式。大多数时候,我得到的inners是一个简单的数组的形式:

{"inners":[{inner1},{inner2},...]}

,这对我来说很好。但是从这个关联中删除后(在示例中,我假设第二个被删除了),我得到一个这样的数组:

{"inners":{"0":{inner1},"2":{inner2},"3":{...},...}

此外,如果删除了最后一个Inner(或几个Inners都位于数组的末尾),则不会发生此问题。

我的假设是,Doctrine将关联放在一个关联数组中,当json_encode序列化这个数组时,如果索引正常(0,1,2...),它以第一种格式呈现,如果索引被破坏,则以第二种格式呈现(0,2,3...)。

所以我现在的问题是:为什么学说在删除后不将结果放在"正常索引"数组中? 我认为 Doctrine 的缓存机制发生了一些问题,但我无法弄清楚到底是什么。也许是因为实体管理器仍然考虑已删除的实体。但我认为实体经理在冲洗后被清除了,不是吗? 我试图打电话给实体经理clear(),但我有一些奇怪的行为,很快就放弃了。

如果你们中的一个人能指出我所犯的错误,我会很高兴。

似乎问题出在键盘的我这边。

我不知道为什么,但我今天重新尝试clear实体经理,一切都像我最初预期的那样正常。我第一次尝试时一定做出了一个非常愚蠢的举动。

感谢大家的帮助,对于给您带来的不便,我们深表歉意。

相关内容

  • 没有找到相关文章