関連する ParticularData エンティティ クラスを持つ 1 つの User エンティティ クラスがあります。フォームを通じて、その 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に挿入ではなく更新するように簡単に指示して、関連付けられたエンティティを更新するにはどうすればよいでしょうか?