假设我按ID加载用户:
$user = $em->find('Domain\Model\User', 123);
Run Code Online (Sandbox Code Playgroud)
现在运行DQL查询来选择多个用户,其中包括这个已知用户:
$users = $em->createQuery('SELECT u FROM Domain\Model\User u')->getResult();
Run Code Online (Sandbox Code Playgroud)
如果用户123在这两个查询之间的数据库中发生了变化(假设我不在REPEATABLE READ事务中),那么此查询是否会使用查询返回的新数据刷新用户123,或者它是否只是从身份映射返回对象忽略新数据?
Ben*_*min 10
在测试了这个确切的用例之后,事实证明Doctrine 2 不会使用DQL查询返回的数据刷新现有实体,只会从身份映射中返回它.
我终于找到了证实这一点的相关文件:
在正常操作中,丢弃加载已存在实体的数据的结果集,以有利于已经存在的实体.
它还提供了一种强制DQL查询刷新实体的方法,使用Query::HINT_REFRESH:
如果指定此提示并且查询返回已由UnitOfWork管理的实体的数据,则将刷新现有实体的字段.
这非常方便易用:
use Doctrine\ORM\Query;
$users = $em->createQuery('SELECT u FROM Domain\Model\User u')
->setHint(Query::HINT_REFRESH, true)
->getResult();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |