gpt4 book ai didi

doctrine-orm - DQL 查询是否刷新身份映射中已有的实体?

转载 作者:行者123 更新时间:2023-12-04 04:46:28 26 4
gpt4 key购买 nike

假设我通过 id 加载用户:

$user = $em->find('Domain\Model\User', 123);

现在运行一个 DQL 查询来选择几个用户,其中包括这个已知用户:

$users = $em->createQuery('SELECT u FROM Domain\Model\User u')->getResult();

如果用户 123 在这两个查询之间的数据库中发生了更改(假设我不在 REPEATABLE READ 事务中),此查询会使用查询返回的新数据刷新用户 123,还是仅从身份映射返回对象而忽略新数据?

最佳答案

在测试了这个确切的用例之后,事实证明 Doctrine 2 不会使用 DQL 查询返回的数据刷新现有实体 ,并且只有 从身份映射 返回它。

我终于找到了相关的 documentation 证实了这一点:

In normal operation a result-set that loads data of an already existing entity is discarded in favor of the already existing entity.



它还提供了一种使用 Query::HINT_REFRESH 强制 DQL 查询刷新实体的方法:

If you specify this hint and a query returns the data for an entity that is already managed by the UnitOfWork, the fields of the existing entity will be refreshed.



这是非常方便和易于使用的:

use Doctrine\ORM\Query;

$users = $em->createQuery('SELECT u FROM Domain\Model\User u')
->setHint(Query::HINT_REFRESH, true)
->getResult();

关于doctrine-orm - DQL 查询是否刷新身份映射中已有的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297149/

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