Symfony2 EntityManager不经过持久更新

时间:2017-08-07 07:04:37

标签: symfony doctrine entitymanager

正如您在下面所见,我根本没有“坚持”。但我所做的改变是注册。我很感激你的帮助。

$entityManager = $this->getDoctrine()->getManager(); $entity = $entityManager->getRepository(City::class)->find(1); $entity->setName("debug name"); $entityManager->flush();

2 个答案:

答案 0 :(得分:7)

初始化新对象时必须调用方法persist(),例如new City()。当您使用find()从数据库中获取对象时,它已经有一些元数据。 来自学说网站

  

Doctrine使用Identity Map模式跟踪对象。无论何时你   从数据库中获取一个对象,Doctrine将保留对它的引用   UnitOfWork中的这个对象。包含所有实体的数组   引用是两级深度,并具有键“根实体名称”和   “ID”。

以下是来自学说的例子:

  

当你调用EntityManager #flush时,Doctrine会询问身份图   对于当前管理的所有对象。这意味着你没有   调用EntityManager#一遍又一遍地传递已知的   对象到EntityManager。这是已知实体的NO-OP,但是   导致编写的代码很多,这让其他开发人员感到困惑。

     

以下代码将使用所做的更改来更新您的数据库   Person对象,即使你没有调用EntityManager#persist:

<?php
$user = $entityManager->find("Person", 1);
$user->setName("Guilherme");
$entityManager->flush();

了解更多here

答案 1 :(得分:0)

只需在从存储库加载找到的实体后分离它

$entity = $entityManager->getRepository(City::class)->find(1);    
$entityManager->detach($entity);