Doctrine orm doctrine2从ArrayCollection获取新添加的元素,而不触发延迟加载

Doctrine orm doctrine2从ArrayCollection获取新添加的元素,而不触发延迟加载,doctrine-orm,lazy-loading,symfony,Doctrine Orm,Lazy Loading,Symfony,所以我有一个用户和角色实体。用户可以有许多角色。 在我的代码中,我有如下内容: $role = /* ... create role */; $user->addRole($role); 在我的代码中的其他地方,我只能访问$user,因此我想检索以前添加的角色。如果我执行$user->getRoles()操作,将触发延迟加载,我不希望这样 那么,如何在不触发延迟加载的情况下从ArrayCollection获取新添加的角色呢 更新 所有这些都是在同一个请求上发生的,在第二部分中,我只能访问

所以我有一个
用户
角色
实体。用户可以有许多角色。 在我的代码中,我有如下内容:

$role = /* ... create role */;
$user->addRole($role);
在我的代码中的其他地方,我只能访问
$user
,因此我想检索以前添加的角色。如果我执行
$user->getRoles()
操作,将触发延迟加载,我不希望这样

那么,如何在不触发延迟加载的情况下从ArrayCollection获取新添加的角色呢

更新


所有这些都是在同一个请求上发生的,在第二部分中,我只能访问$user对象($role仍在内存中),这是因为某些粘滞层(可能是糟糕的设计)。

如果触发延迟加载,您应该通过联合查询检索您的用户

与在查询中检索用户类似:

$qb
->addSelect("role");
->innerJoin("user.roles","role")

我认为最好是使用这个简单的解决方案,因为不好的原因而尝试解决问题。

如果触发了延迟加载,您应该通过联合查询检索您的用户

与在查询中检索用户类似:

$qb
->addSelect("role");
->innerJoin("user.roles","role")

我认为最好是使用这个简单的解决方案,而不是因为不好的原因而尝试解决问题。

延迟加载有什么问题?执行额外的查询是没有原因的。在我的应用程序中,我有很多角色,它可能很重。延迟加载有什么问题吗?一个额外的查询是无缘无故执行的。在我的应用程序中,我有很多角色,可能很重。这不是我想要的。我在同一个请求中工作,我刚刚创建的$role仍然在内存中,我只希望实例返回。它在内存中,但其他角色是为什么您有另一个请求,不是吗?如果您真的想围绕原则进行编码,请将创建的角色放入一个变量(如$addedRole)中,并在需要的地方使用它。如果它仍在内存中,为什么不在存储它的变量中使用它呢?正如我所说,在第二次调用中,我只能访问用户。也许,这是一个糟糕的应用程序设计,但我现在仍在坚持。这不是我想要的。我在同一个请求中工作,我刚刚创建的$role仍然在内存中,我只希望实例返回。它在内存中,但其他角色是为什么您有另一个请求,不是吗?如果您真的想围绕原则进行编码,请将创建的角色放入一个变量(如$addedRole)中,并在需要的地方使用它。如果它仍在内存中,为什么不在存储它的变量中使用它呢?正如我所说,在第二次调用中,我只能访问用户。也许,这是一个糟糕的应用程序设计,但我现在仍然坚持它。