Val*_*yev 9 orm doctrine doctrine-orm
我长期使用基于SQL查询的数据库访问级别.但现在我决定使用ORM Doctrine2.此刻,我对实体工作流程存在一个概念上的误解.
最好通过示例描述:
try {
$user = $entityManager->find('User', 1);
$user->setName('New name');
$entityManager->flush();
}
catch (...)
{
// !we are here: changes failed and $user-row in DB was not updated
}
// ...
$user = $entityManager->find('User', 1);
$user->setOther('Other');
$entityManager->flush(); // <- in this request both [other] and [name] fields will be updated to DB, but only [other] update expected
Run Code Online (Sandbox Code Playgroud)
在第一个代码块中,我获取了$ user对象.更改[名称]并尝试保存,但失败了.在第二个块(与第一个块无关)中,我再次获取了$ user对象.但是ORM第一次返回了与同一对象的链接.所以这个对象已经改变了[name]属性.在第二个块的最后一行,我只想保存[其他]字段,但[other]和[name]都会更新.
解决这种情况的正确方法是什么?
tim*_*dev 16
这是设计的.
实体管理器确保您始终为给定的ID获取相同的实体.毕竟,这就是身份意味着什么.ID只能是一个唯一的用户.
如果要从数据库中"刷新"实体,EntityManager :: refresh()将为您执行此操作.来自文档:
从数据库刷新实体的持久状态,覆盖尚未保留的任何本地更改.
小智 5
你必须执行命令:$entityManager->detach($userEntity);.调用flush后,更改将不会反映在数据库中.其他实体将工作.
| 归档时间: |
|
| 查看次数: |
6929 次 |
| 最近记录: |