我的项目中有一个简单的实体,如下所示:
$obj = Entity\ImportResume();
$obj->setStatus(1);
$em->persist($obj);
$em->flush();
$em->clear();
$obj->setStatus(2);
$em->persist($obj);
$em->flush();
$em->clear();
但是学说performe 2插入,我需要1次插入和1次更新。
Obs:
任何帮助?
答案 0 :(得分:1)
如果我正在阅读Doctrine文档,则只需要persist
初INSERT
。{/ p>
本段建议只需更改对象然后刷新存储即可:
因此,当调用EntityManager#flush()时,此类实体的持久状态将随后与数据库正确同步。
并进一步:
7.7.2. Synchronizing New and Managed Entities
刷新操作适用于具有以下语义的托管实体:
- 仅当至少有一个持久字段发生更改时,才使用SQL UPDATE语句将实体本身同步到数据库。
- 如果实体未更改,则不会执行SQL更新。
答案 1 :(得分:0)
我贬低原因是:$ em-> clear();
clear方法清除所有实体的状态,并导致实体管理器上的id丢失。
Solucion:
删除$ em-> clear();
感谢TimWolla!
答案 2 :(得分:0)
如果它是相同的对象,你可以做
$em->persist($obj);
$obj->setStatus(1);
$obj->setStatus(2);
$em->flush();
如果是2个不同的对象
$obj1 = Entity\ImportResume();
$obj1->setStatus(1);
$em->persist($obj1);
$obj2 = Entity\ImportResume();
$obj2->setStatus(2);
$em->persist($obj2);
$em->flush();
只有在必要时才使用'clear'方法在同一代码中重启进程。