Aqui os dejo el código. El $opinion->setArticulo($articulo); he probado a ponerlo también justo después del new Opinion(); y también me da error. El $articulo contiene un objeto articulo 100% seguro ya que lo muestro por pantalla mientras se comenta.
La variable $articulo_id la obtengo por la URL.
Código PHP:
Ver original$em = $this->getDoctrine()->getEntityManager();
// Articulo Actual
$articulo = $em->getRepository('ArticuloBundle:Articulo')->findOneById($articulo_id);
$marca = $articulo->getMarcaId(); // Obtenemos los datos de la marca
// Usuario actual
$usuario = $this->get('security.context')->getToken()->getUser();
$opinion = new Opinion();
$form = $this->createFormBuilder($opinion)
->add('opinion', 'textarea',array('label' => 'Opinión extensa sobre el producto')) ->add('sabor', 'integer')
->add('calidadprecio', 'integer',array('label' => 'Calidad/Precio')) ->add('efectividad', 'integer')
->add('probado', 'choice' ,array( 'choices' => array('0' => 'No', '1' => 'Si'), 'required' => true,
'label' => '¿Has probado el producto?'
))
->add('pros', 'entity', array( 'expanded' => false,
'class' => 'OpinionesBundle:Pros',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('pc')
->orderBy('pc.descripcion', 'ASC');
},
'multiple' => true,
'property' => 'descripcion',
'label' => 'Beneficios'
))
->add('contras', 'entity', array( 'expanded' => false,
'class' => 'OpinionesBundle:Contras',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('pc')
->orderBy('pc.descripcion', 'ASC');
},
'multiple' => true,
'property' => 'descripcion',
'label' => 'Contras'
))
->getForm();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if($form->isValid()) {
$opinion->setArticulo($articulo);
$em->persist($opinion);
return $this->redirect($this->generateUrl('portada'));
} else {
// Formulario no valido
}
}
Gracias por vuestra ayuda a ver si conseguimos resolver esto. :)