Php 实体国家学说
突然,他有了这样的行为:Php 实体国家学说,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,突然,他有了这样的行为: $em=$connection->getEntityManager(); $entity=$em->find('SomeModel',1); $entity->setName('name'); $em->flush() 它将影响数据库,因为模型具有管理状态 $em->getUnitOfWork()->getEntityState($entity)//1===UnitOfWork::状态管理 这让我非常紧张,现在我想知道什么时候可以从一个具有托管状态的数据库中获取实体 据
$em=$connection->getEntityManager();
$entity=$em->find('SomeModel',1);
$entity->setName('name');
$em->flush()代码>
它将影响数据库,因为模型具有管理状态
$em->getUnitOfWork()->getEntityState($entity)//1===UnitOfWork::状态管理
这让我非常紧张,现在我想知道什么时候可以从一个具有托管状态的数据库中获取实体 据我所知,从实体管理器获得的任何实体最初都将处于托管状态。唯一需要使用persist()
显式管理实体的时间是在实体管理器外部创建的实体,如:
$entity = new SomeModel;
$em->persist($entity);
或者在不同的实体管理器中创建(在这种情况下,它仍然由另一个实体管理器管理,因此在实体管理器上调用flush
,不会影响数据库)
如果您不想管理实体,可以使用它
发件人:
实体从EntityManager分离,因此不再通过调用EntityManager上的#detach($entity)方法或通过将分离操作层叠到该实体来进行管理。分离实体后,对分离实体所做的更改(如果有)(包括删除实体)将不会同步到数据库
抱歉,我不明白你的问题?看起来你已经得到了具有托管状态的实体。您想在不使用托管状态的情况下获取它们吗?这就是将实体置于托管状态的情况。我不想知道更多的情况下,我可以得到管理状态的实体,因为它可能会带来很多麻烦。
$em->detach($entity);