Foros del Web » Programando para Internet » PHP » Symfony »

Insert en tabla uno a muchos

Estas en el tema de Insert en tabla uno a muchos en el foro de Symfony en Foros del Web. Hola. Estoy empezando con Symfony pero me he quedado estancado en un insert. El ejemplo es sencillo, tabla actividades y tabla facturas, una actividad tiene ...
  #1 (permalink)  
Antiguo 24/09/2014, 08:32
 
Fecha de Ingreso: mayo-2009
Mensajes: 742
Antigüedad: 15 años
Puntos: 6
Insert en tabla uno a muchos

Hola. Estoy empezando con Symfony pero me he quedado estancado en un insert.
El ejemplo es sencillo, tabla actividades y tabla facturas, una actividad tiene muchas facturas, una factura solo tiene una actividad.
La tabla facturas tiene el id de actividad. Quiero inserta un registro en la tabla facturas, pero al hacer $activ->setActividad(2); algo esta pasando porque me sale este error:

Catchable fatal error: Argument 1 passed to Ibs\Bundle\Entity\facturas::setActividad() must be an instance of Ibs\Bundle\Entity\actividades, integer given, called in C:\xampp\htdocs\WEBS\pruebas\symfony-cancino\src\Ibs\Bundle\Controller\InyeccionControl ler.php on line 63 and defined in C:\xampp\htdocs\WEBS\pruebas\symfony-cancino\src\Ibs\Bundle\Entity\facturas.php on line 109

Este es el código del controller
$em = $this->getDoctrine()->getManager();

$activ = new facturas();
$activ->setNumerofactura("AAA-zz-2015");
$activ->setDescripcion("Descripción para la factura de prueba");
$activ->setActividad(2);

//$em->persist($pru);
$em->persist($activ);
$em->flush();
  #2 (permalink)  
Antiguo 24/09/2014, 14:47
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Insert en tabla uno a muchos

El problema es por que estas queriendo pasar el id de actividad y facturas espera recibir un objeto del tipo actividad. Para que funcione tu ejemplo tienes que encontrar primero la actividad de id 2 y pasarlo a método de facturas.
Código PHP:
Ver original
  1. $em = $this->getDoctrine()->getManager();
  2.  
  3. $actividad = $em->getRepository('TuBundle:Actividad')->find(2);
  4.  
  5. $activ = new facturas();
  6. $activ->setNumerofactura("AAA-zz-2015");
  7. $activ->setDescripcion("Descripción para la factura de prueba");
  8. $activ->setActividad($actividad);
  9.  
  10. //$em->persist($pru);
  11. $em->persist($activ);
  12. $em->flush();
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 24/09/2014, 18:42
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 9 años, 9 meses
Puntos: 44
Respuesta: Insert en tabla uno a muchos

hhs tiene razón en su respuesta. Lo único que podría agregarle es que ese find va a fallar si la clave primaria no está guardada en un campo con el nombre id o si por algún motivo el id estuviera repetido.
La forma correcta de obtener esa instancia para que devuelva un único registro suponiendo que el campo se llame id es:

Código PHP:
$actividad $em->getRepository('TuBundle:Actividad')->findOneById(2); 
Y si el campo se llamara por ejemplo "actividadesId" sería:

Código PHP:
$actividad $em->getRepository('TuBundle:Actividad')->findOneByActividadesyId(2); 
y como bien fue dicho, luego en vez de pasar el integer, se le pasará el objeto

Código PHP:
$activ->setActividad($actividad); 
Saludos!
  #4 (permalink)  
Antiguo 25/09/2014, 00:46
 
Fecha de Ingreso: mayo-2009
Mensajes: 742
Antigüedad: 15 años
Puntos: 6
Respuesta: Insert en tabla uno a muchos

Hola. Muchas gracias por vuestras respuestas, con esto me ha funcionado:

$actividad = $em->getRepository('IbsBundle:actividades')->find(2)

Si no hubiera sido por vuestra ayuda, nunca hubiera pensado que tendría que hacerse de esta forma para insertar ese dato.

En cualquier caso, esto es una prueba, quiero decir, cuando sea mas en serio, el valor del campo actividades vendrá por un formulario, imagino que cuando llegue a eso, con recoger el dato del post será suficiente para poder insertarlo, no?
  #5 (permalink)  
Antiguo 25/09/2014, 21:31
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Insert en tabla uno a muchos

En terminos generales, ese es el panorama normal pero cuando estes en ese punto igual puedes preguntar y vemos tu caso en concreto.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: insert, muchos, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:42.