我有一个 User 实体类,具有关联的 ParticularData 实体类。通过一个表单,我想更新该 ParticularData,所以,如果我尝试从会话中获取用户:
$user = $this->getRequest()->getSession()->get('user');
$userRepository = $this->getDoctrine()->getRepository('eCommerceUserBundle:User');
$user->setParticularData($data); // $data is a ParticularData instance fetched from the form
$userRepository->update($user);
数据库没有任何反应(尽管对于 ParticularData 已更改的系统)。然后我尝试直接从数据库中获取用户:
$userRepository = $this->getDoctrine()->getRepository('eCommerceUserBundle:User');
$user = $userRepository->selectById(20);
$user->setParticularData($data);
$userRepository->update($user);
在这种情况下,Doctrine2 将新的 ParticularData 视为一个新实例,因此它试图在 ParticularData 关联表中插入另一行(而不是更新现有的)。
我的更新方法:
public function update($user){
$this->_em->merge($user);
$this->_em->flush();
}
那么,我怎样才能轻松地更新关联实体告诉 Doctrine2 更新,而不是插入?