突然间学说有这样的行为:
A
它会影响数据库,因为模型具有托管状态。
$em = $connection->getEntityManager();
$entity = $em->find('SomeModel', 1);
$entity->setName('name');
$em->flush();
它为我带来了很多麻烦,现在我想知道何时可以从具有托管状态的数据库中获取实体?
答案 0 :(得分:1)
据我所知,您从实体经理获得的任何实体最初都处于托管状态。您需要使用persist()
显式管理实体的唯一时间是它是否在实体管理器外部创建,如:
$entity = new SomeModel;
$em->persist($entity);
或在不同的实体管理器中创建(在这种情况下,它仍然可以通过其他实体管理器进行管理,因此在您的实体管理器上调用flush
不会影响您的数据库)。
如果您不想要管理实体,可以detach
。
$em->detach($entity);
实体与EntityManager分离,因此不再通过在其上调用EntityManager#detach($ entity)方法或通过将分离操作级联到它来进行管理。对分离的实体所做的更改(如果有的话)(包括删除实体)将在分离实体后不会同步到数据库。