2015-10-28 1 views
0

У меня возникла проблема при попытке сравнить базу данных данных с данными, вводимыми по форме. У меня есть "pedido", у этого есть много "items". Мне нужно сравнить "item" от "item", если это изменяется в форме. Затем мне нужно получить исходные данные из базы данных и данные, измененные из формы. Проблема в том, когда я пытаюсь получить исходные данные из базы данных. Всегда получайте данные, измененные по форме. Как я могу получить исходные данные из базы данных после отправки формы?Получить данные из базы данных не из формы

ПРИМЕЧАНИЕ: я попробовал получить PedidoAuxiliar до и после HandleRequest.Это не работает!

UPDATE CODE: Ввод как сравнение items

Это мой контроллер editAction:

public function editarAction(Request $request, $id) 
    {  
     $em = $this->getDoctrine()->getManager(); 
     $pedido = $em->getRepository('PedidosBundle:Pedido')->find($id); 
     //$pedidoAuxiliar = $em->getRepository('PedidosBundle:Pedido')->find($id); 
     $formulario = $this->createForm(new PedidoType(), $pedido, array(
      'action' => $this->generateUrl('my_routing', array('id' => $id)), 
      'attr' => array(
       'novalidate' => 'novalidate' 
      ), 
      'method' => 'POST', 
     )); 
     $formulario->handleRequest($request); 

     if($formulario->isValid()){ 
      $pedidoAuxiliar = $em->getRepository('PedidosBundle:Pedido')->find($id); 

      foreach($pedido->getArticulos() as $articulo){ 

      foreach($pedidoAuxiliar->getArticulos() as $articuloAuxiliar){ 
       if($articuloAuxiliar->getId() == $articulo->getId()){ 
        if($articuloAuxiliar->getCantidad() == $articulo->getCantidad()){ 
      //Some code... 
+0

Я считаю, что вы должны взглянуть на [Политики изменения слежения] (http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/change-tracking-policies.html) – stevenll

+0

Основная проблема заключается в том, что D2 поддерживает внутренний кеш объектов, поэтому ваши два запроса всегда возвращают тот же самый объект. Вы можете рассмотреть клонирование вашего базового объекта, а затем сравнить. Или сделайте некоторые изменения, которые другие люди предложили. – Cerad

ответ

1

Чтобы получить данные из БД и можно использовать EntityManager :: Refresh ($ лица) его перезапись данных с использованием сущностей дб. Таким образом, вы должны использовать данные из формы, а не сущности для сравнения. Но у всегда UST Доктрины проверить изменения, например: http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/change-tracking-policies.html , потому что доктрина держать информацию о старом и новом значении, но не так легко получить (за пределы слушателей)

0

Я нашел решение. Я создал новый диспетчер сущности подключения в моем config.yml. Теперь я вызываю данные сущности из моего нового менеджера сущностей и получаю данные из базы данных! Благодаря!

Смежные вопросы