过去曾多次提出过这个问题,但这带来了独特的挑战,因为它将一些问题结合在一个更大的问题中。
我有一个实体(用户)在我的应用程序中用作用户类,然后我有另一个实体(UserExtra),与用户实体一对一关系,UserExtra 的 id 与 User 相同。外键与主键相同。
当加载用户对象时(比如 by$this->getUser()
或 by {{ app.user }}
,UserExtra 数据也通过连接加载。拥有两个实体的全部意义在于我不必一次加载所有数据。
我什至尝试为用户定义一个自定义 UserLoaderInterface/UserProviderInterface 存储库,确保 refreshUser 和 loadUserByUsername 只会加载用户数据(我希望 UserExtra 数据位于代理中,除非我明确需要它)但是当 Doctrine 去水合对象,它发出一个额外的查询来加载 UserExtra 数据,从而跳过代理状态。
有没有办法解决这个问题?