0
我在Symfony 2.6.1项目中使用了Doctrine 2.4.6。问题在于preUpdate回调中对实体所做的更改未保存在数据库中。代码如下:学说preUpdate实际上并没有改变实体
class MyListener {
public function preUpdate(PreUpdateEventArgs $args) {
$entity = $args->getEntity();
$args->setNewValue('name', 'test');
// echo $args->getNewValue('name'); --> prints 'test'
}
}
class DefaultController extends Controller {
/**
* @Route("/commit", name="commit")
*/
public function commitAction(Request $request) {
$content = $request->getContent();
$serializer = $this->get('jms_serializer');
/* @var $serializer \JMS\Serializer\Serializer */
$em = $this->getDoctrine()->getManager();
/* @var $em \Doctrine\Orm\EntityManagerInterface */
$persons = $serializer->deserialize($content, 'ArrayCollection<AppBundle\Entity\Person>', 'json');
/* @var $persons \AppBundle\Entity\Person[] */
foreach($persons as $person) {
$em->merge($person);
}
$em->flush();
return new JsonResponse($serializer->serialize($persons, 'json'));
// Person name is NOT 'test' here.
}
}
仔细阅读印刷精美/en/latest/reference/events.html#preupdate这是混淆的常见来源。 preUpdate事件有很多限制。 – Cerad