2017-04-24 110 views
1

突然学说ORM有这样的行为:主义的国家实体

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

而且会影响一个数据库,因为模型已成功状态。

$em->getUnitOfWork()->getEntityState($entity); //1 === UnitOfWork::STATE_MANAGED

它spoild很多神经对我来说,现在我想知道我什么时候可以从管理状态的数据库中获取实体?

+1

对不起,我不明白你的问题? – LBA

+0

它看起来像你已经获得了管理状态的实体。你想让他们无管理状态吗? –

+0

这是一个让实体处于被管理状态的情况。 我不想知道更多的情况下,我可以得到管理状态的实体,因为它可能会造成很多麻烦。 –

回答

1

据我所知,您从实体管理器获得的任何实体最初都处于受管理状态。你需要与persist()明确管理实体的唯一情况是如果实体管理器之外创建的,如:

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

或在不同的实体管理器(在这种情况下,它仍然会管理创建的,但由其他实体管理器,所以在你的实体管理器上调用flush不会影响你的数据库)。

如果你不想要一个实体来管理,你可以detach它。

$em->detach($entity); 

the documentation

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