学说实体的国家

时间:2017-04-24 15:47:43

标签: php symfony doctrine-orm

突然间学说有这样的行为:

A

它会影响数据库,因为模型具有托管状态。

$em = $connection->getEntityManager(); $entity = $em->find('SomeModel', 1); $entity->setName('name'); $em->flush();

它为我带来了很多麻烦,现在我想知道何时可以从具有托管状态的数据库中获取实体?

1 个答案:

答案 0 :(得分:1)

据我所知,您从实体经理获得的任何实体最初都处于托管状态。您需要使用persist()显式管理实体的唯一时间是它是否在实体管理器外部创建,如:

$entity = new SomeModel;
$em->persist($entity);

或在不同的实体管理器中创建(在这种情况下,它仍然可以通过其他实体管理器进行管理,因此在您的实体管理器上调用flush不会影响您的数据库)。

如果您不想要管理实体,可以detach

$em->detach($entity);

来自the documentation

  

实体与EntityManager分离,因此不再通过在其上调用EntityManager#detach($ entity)方法或通过将分离操作级联到它来进行管理。对分离的实体所做的更改(如果有的话)(包括删除实体)将在分离实体后不会同步到数据库。