gpt4 book ai didi

php - 序列化时,Doctrine oneToMany 关系导致反向实体上的外键为 null

转载 作者:可可西里 更新时间:2023-10-31 23:37:17 25 4
gpt4 key购买 nike

Relevant information: I'm using Symfony 2.8.x, Doctrine 2.4.8 and JMSSerializerBundle 1.0.

一个Resource可以有很多Experiences。我正在进行 API 调用 以检索 Resource 和所有关联的 Experience

但是,我返回的 JSON 在 Experience 实体的 $resource 上包含一个 null

我正在使用以下方法来检索 Resource:

$this->findBy([], [], $limit, $offset);

我不认为这应该是一个问题,因为我已经尝试直接在注释中将获取模式设置为 EAGER - 这仍然没有奏效。我还清除了缓存。

资源.orm.yml

oneToMany:
experiences:
targetEntity: Experience
mappedBy: resource
fetch: EAGER

体验.orm.yml

resource:
targetEntity: Resource
inversedBy: experiences
joinColumn:
name: resource_id
referencedColumnName: id
fetch: EAGER
fetch: EAGER

看,我已经尝试了所有的急切获取!!

响应

我在为此 json 发出 API 请求时得到的响应:

{
"resources": [{
"id": 1,
# SNIP #
"experiences": [{
"resource": null,
"id": 1,
# SNIP #
}]
}]
}

注意资源为空!

这就是为什么我认为这是延迟加载的问题:集合是 Doctrine\ORM\PersistentCollection 的一个实例,而不是我期望的只是一个数组:

enter image description here

为什么这是空的??我的问题是什么?我有没有:

  • 搞砸了关系配置,这实际上与延迟加载无关
  • 将延迟加载放在错误的位置
  • 因为递归而被误解,这是一件的事情?
  • 还有什么智障吗?

最佳答案

这可能是 API 及其序列化程序(模型到 JSON 转换)的正常行为。

为什么您需要实际填充 experiences.resource?您已经在 J​​SON 的根级别上拥有它。

如果您仍希望体验完全包含其资源,您可能必须配置序列化程序并强制其在序列化中更深入 1 步。但大多数情况下,序列化器以这种方式配置以避免无限循环(资源包含其体验,包含其资源,包含其体验,等等。

关于php - 序列化时,Doctrine oneToMany 关系导致反向实体上的外键为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886548/

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