我需要知道在我的表单中是否修改了articulo
,但是当我在pedido
之前或之后找到handleRequest
时,请始终保存相同的对象。
我需要检查articulo
是否被修改,我该如何获得它?
这是我的代码:
$pedido = $em->getRepository('PedidosBundle:Pedido')->find($id);
...
$formulario->handleRequest($request);
if($formulario->isValid()){
$pedidoAuxiliar = $em->getRepository('PedidosBundle:Pedido')->find($id);//COPIA NO MODIFICADA POR EL FORMULARIO
...
foreach($pedido->getArticulos() as $articulo){//ACTUAL PEDIDO PASADO POR FORMULARIO
//$exist = false; //Para controlar si existia este articulo o si es nuevo.
foreach($pedidoAuxiliar->getArticulos() as $articuloAuxiliar){// PEDIDO SIN PASAR POR EL FORMULARIO
if($articuloAuxiliar->getId() == $articulo->getId()){//SI ESTE ARTICULO ESTABA AÑADIDO ANTES DE EDITAR EL PEDIDO
//$exist=true;
dump($articuloAuxiliar);
dump($articulo);
die();
...
答案 0 :(得分:0)
表单有效性检查后的第二个查找实际上并不查询数据库中的旧值:实体管理器已经存储了该实体引用,因此它只返回它而不对数据库执行额外的查询(因此返回的实体)通过第二个查找与您在函数中修改的完全相同)。
例如,您可以将原始文章ID存储在临时数组中(在hanbleRequest之前),并将此数组与修改后的实体ID进行比较(在您的情况下这是否足够取决于您实际想要对改变了文章实体)
<强>已更新强>
同样适用于代码
$pedido = $em->getRepository('PedidosBundle:Pedido')->find($id);
$articleIds = array();
// get the original article ids
foreach($pedido->getArticulos() as $articulo)
{
articleIds[] = $articulo->getId();
}
...
$formulario->handleRequest($request);
if($formulario->isValid())
{
...
foreach($pedido->getArticulos() as $articulo)
{
$exist = false; // whether the article existed previosly
// check if the article exists
if(in_array($articulo->getId(), articleIds))
{
$exist=true;
//dump($articuloAuxiliar);
dump($articulo);
die();
...
}
}
}