Hola tomo esta pregunta del foro
El error se produce porque Doctrine espera que al método setProyecto() le pases un objeto de tipo Proyecto y le estás pasando un número entero (que es el id del proyecto).
La solución rápida consiste en buscar el proyecto a partir de su id y pasárselo al método:
$idProyecto = $request->request->get('idProyecto'); $proyecto = $this->getDoctrine() ->getRepository('AcmeNombreBundle:Proyecto') ->find($idProyecto) ; $tarea->setProyecto($proyecto);
el tema es que estoy dentro de una claste de tipo Repository de una Entidad y no puedo llamar a $this->getDoctrine() desde ahi
si hago
$dql = "SELECT u FROM AppBundle:User u"; $dql .= " Where u.id =" . $user_id; $query = $this->getEntityManager()->createQuery($dql)->getResult();
Como puedo hacer para devuelva una instancia de un objeto similar al código de mas arriba???
Respuestas
Hola @xub,
En primer lugar, la mejor forma de hacer lo que describes en la primera parte, es usando la anotación ParamConverter, con esto te ahorras una líneas. En algunas partes he leído que no es recomendable hacerlo y en otras la recomiendan. Yo lo recomiendo.
De esta forma tu pasas el parámetro que necesitas en la ruta y Symfony hace la magia. No tienes la necesidad de usar el $request
dentro del controlador. Aquí un ejemplo:
/** * @Route("/{proyecto}", name="category_show") * @Method("GET") */ public function ???Action(Proyecto $proyecto) { ... $tarea->setProyecto($proyecto); ... }
Para la segunda duda, tienes que pasar el objeto como parámetro del método que vas a usar y luego colocarlo como parámetro de la DQL.
public function consulta($id) { $query = $this->getEntityManager()->createQuery( "SELECT u FROM AppBundle:User u WHERE u.id =: id" )->setParameter('id', $id); return $query->getResult(); }
En este caso pasas solo el ID.
Espero sea de ayuda,
@miguelplazasr