首页 > 解决方案 > 带有 fetch Eager 的两个字段的 Doctrine 实体

问题描述

我已经为这个问题苦苦挣扎了几天,我找不到任何理由。我有一个用户实体

 /**
 * @var string
 *
 * @ORM\Column(name="uuid", type="string", length=255, nullable=false)
 */
private $uuid;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=255, nullable=false)
 */
private $name; 

/**
 * One User has Many Groups.
 *
 * @ORM\OneToMany(targetEntity="UserGroup", mappedBy="user", cascade={"persist"}, fetch="EAGER")
 */
protected $groups;

/**
 * One User has Many Comments.
 *
 * @ORM\OneToMany(targetEntity="Comment", mappedBy="user_id", fetch="EAGER")
 */
protected $comments;

用户有两个引用的实体:组(通过 Pivot Entity UserGroup)和评论

问题是当我执行查询时,只获得了一个引用的实体内容。在上面的类中,它只会得到“组”。如果我从 $groups 中删除 Fetch Eager,它将收集“评论”。如果我将 $comments 属性放在“组”之上,它将只恢复该用户的“评论”,而不是组。

如果我尝试使用 Fetch Lazy,然后我初始化()属性(“子实体”组或评论),我确实 getSnapshot() 发生同样的事情。

知道为什么会发生这种情况吗?

非常感谢!

标签: phpdoctrine

解决方案


所以问题是实体的 ID 字段是一个流(二进制)。当学说读取一次流时,它会“清空”流,因此在下一次使用时,ID 没有内容。我通过从备份变量将 ID 值重新设置为实体来解决它


推荐阅读