// *********************************
public function listadoActoresAction()
{
$em = $this->getDoctrine()->getManager();
$parametros = array(
'annoOscar' => '1941',
'tituloPelicula1' => '%sargento%',
'tituloPelicula2' => '%camino%'
);
$dql = 'SELECT a
FROM cineactoresBundle:Actores a
WHERE a.annoOscar >= :annoOscar
AND a.tituloPelicula LIKE :tituloPelicula1
OR a.tituloPelicula LIKE :tituloPelicula2
ORDER BY a.annoOscar';
$query = $em->createQuery($dql)->setParameters($parametros);
$arrActores = $query->getResult();
return $this->render('cineactoresBundle:Default:listadoActores.html.twig', array('actores' => $arrActores));
}
Mostrando entradas con la etiqueta Symfony BD. Mostrar todas las entradas
Mostrando entradas con la etiqueta Symfony BD. Mostrar todas las entradas
Symfony BD: Ejemplo métodos básicos
<?php
namespace cine\actoresBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use cine\actoresBundle\Entity\Actores; // para trabajar con esa tabla de la BD
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller
{
// *********************************
public function indexAction($name)
{
return $this->render('cineactoresBundle:Default:index.html.twig', array('name' => $name));
}
// *********************************
public function borrarActorAction($id)
{
$em = $this->getDoctrine()->getManager();
$repositorio = $em->getRepository('cineactoresBundle:Actores');
$actor = $repositorio->findOneById($id); // solo devolverá uno
if (!$actor)
throw $this->createNotFoundException('No se puede borrar porque no existe el id:'.$id);
$em->remove($actor);
$em->flush(); // lo borra de la BD
return New Response('Se ha eliminado correctamente el actor con el id:'.$id);
}
// *********************************
public function insertarActorAction($nombre, $anno, $tituloPelicula)
{
// Insertar en BD
$actor = new Actores();
$actor->setNombre($nombre);
$actor->setAnnoOscar($anno);
$actor->setTituloPelicula($tituloPelicula);
$em = $this->getDoctrine()->getManager();
$em->persist($actor);
$em->flush();
return new Response("El actor ".$nombre." se ha metido correctamente con el id:".$actor->getId());
}
// *********************************
public function listadoActoresAction()
{
$em = $this->getDoctrine()->getManager();
$repositorio = $em->getRepository('cineactoresBundle:Actores');
$arrActores = $repositorio->findAll();
return $this->render('cineactoresBundle:Default:listadoActores.html.twig', array('actores' => $arrActores));
}
// *********************************
public function modificarActorAction($id, $nombre, $anno, $tituloPelicula)
{
$em = $this->getDoctrine()->getManager();
$repositorio = $em->getRepository('cineactoresBundle:Actores');
$actor = $repositorio->findOneById($id); // solo devolverá uno
if (!$actor)
throw $this->createNotFoundException('No se ha encontrado el actor con id:'.$id);
$actor->setNombre($nombre);
$actor->setAnnoOscar($anno);
$actor->setTituloPelicula($tituloPelicula);
$em->persist($actor);
$em->flush(); // lo guarda en la BD
return new Response("Se ha modificado correctamente el actor con id: ".$id);
}
// *********************************
public function showActorPorIdAction($id)
{
$em = $this->getDoctrine()->getManager();
$repositorio = $em->getRepository('cineactoresBundle:Actores');
$arrActores = $repositorio->findOneById($id); // solo devolverá uno
return $this->render('cineactoresBundle:Default:showActor.html.twig', array('actores' => $arrActores));
}
// *********************************
public function showActorPorNombreAction($nombre)
{
$em = $this->getDoctrine()->getManager();
$repositorio = $em->getRepository('cineactoresBundle:Actores');
$arrActores = $repositorio->findBy(array("nombre"=>$nombre));
return $this->render('cineactoresBundle:Default:showActor.html.twig', array('actores' => $arrActores));
}
// *********************************
public function showActorPorCampoAction($nombre_campo, $valor)
{
$em = $this->getDoctrine()->getManager();
$repositorio = $em->getRepository('cineactoresBundle:Actores');
$arrActores = $repositorio->findBy(array($nombre_campo=>$valor));
return $this->render('cineactoresBundle:Default:showActor.html.twig', array('actores' => $arrActores));
}
}
Symfony: Controller: Filtrando datos de la BD
Mostrar todos los registros:
http://symfonylsg.dev/app_dev.php/listadoActores
Mostrar los resultados de un registro por su Id:
http://symfonylsg.dev/app_dev.php/showActorPorId/3
Mostrar los resultados de un registro filtrando por un campo concreto:
En el routing:
En el controller:
Ejemplos:
symfonylsg.dev/app_dev.php/showActorPorCampo/tituloPelicula/El sargento York
http://symfonylsg.dev/app_dev.php/showActorPorCampo/nombre/James%20Cagney
Las vista de showActor.html.twig sería:
public function listadoActoresAction()
{
$repository = $this->getDoctrine()->getRepository('cineactoresBundle:Actores');
$arrActores = $repository->findAll();
return $this->render('cineactoresBundle:Default:listadoActores.html.twig', array('actores' => $arrActores));
}
http://symfonylsg.dev/app_dev.php/listadoActores
Mostrar los resultados de un registro por su Id:
public function showActorPorIdAction($id)
{
$repository = $this->getDoctrine()->getRepository('cineactoresBundle:Actores');
$arrActores = $repository->findOneById($id); // solo devolverá uno
return $this->render('cineactoresBundle:Default:showActor.html.twig', array('actores' => $arrActores));
}
http://symfonylsg.dev/app_dev.php/showActorPorId/3
Mostrar los resultados de un registro filtrando por un campo concreto:
En el routing:
cineactores_showActorPorCampo:
pattern: /showActorPorCampo/{nombre_campo}/{valor}
defaults: { _controller: cineactoresBundle:Default:showActorPorCampo }
En el controller:
public function showActorPorCampoAction($nombre_campo, $valor)
{
$repository = $this->getDoctrine()->getRepository('cineactoresBundle:Actores');
$arrActores = $repository->findBy(array($nombre_campo=>$valor));
return $this->render('cineactoresBundle:Default:showActor.html.twig', array('actores' => $arrActores));
}
Ejemplos:
symfonylsg.dev/app_dev.php/showActorPorCampo/tituloPelicula/El sargento York
http://symfonylsg.dev/app_dev.php/showActorPorCampo/nombre/James%20Cagney
Las vista de showActor.html.twig sería:
{% extends 'cineactoresBundle::main.html.twig' %}
{% block title %} Mostrando detalles {%endblock%}
{% block contenido %}
{# comentario: {{ dump(actores) }} #}
<h1>Detalles del actor </h1>
{% if actores.id is defined %} {#Ha filtrado por id y solo hay un registro #}
<div><h2>{{actores.id}} - {{actores.nombre}} - {{ actores.tituloPelicula }} - {{ actores.annoOscar }}</h2> </div>
{% else %} {#Ha filtrado por un campo y devuelve varios registros #}
{% for actor in actores %}
<div><h2>{{actor.id}} - {{actor.nombre}} - {{ actor.tituloPelicula }} - {{ actor.annoOscar }}</h2> </div>
{% endfor %}
{% endif %}
{% endblock %}
{% block lateralDer %}
<a href="../listadoActores">Volver al listado</a>
{% endblock %}
Symfony: Crear BD y tablas
Creamos en phpmyadmin una base de datos: cine_symfony
Nos vamos a:
\app\config\parameters.yml y especificamos el nombre de nuestra BD y demás datos (el puerto no es necesario)
Entramos en la consola (Windows+R) y CMD.
Nos vamos a Symfony: D:\wamp\www\pruebasymfony y escribimos:
php app/console doctrine:generate:entity
Especificamos el nombre del Bundle al que pertenece y el nombre de la tabla que queremos crear (en este caso Actores), sería:
cineactoresBundle:Actores
El formato será Annotation
Vamos indicando el nombre de los campos (excepto el Id que se mete solo por defecto) de esa nueva tabla así como el tipo (el listado de tipos lo tienes en: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#property-mapping)
Una vez terminado se habrá creado en \src\cine\actoresBundle una nueva carpeta llamada entity que contiene el fichero Actores.php donde está toda la estructura de la tabla (aunque todavía no está creada en el PHPmyAdmin).
Para crearla volvemos a la consola:
php app/console doctrine:schema:create
Una vez creada si quisieramos modificar el fichero Actores.php (por ejemplo eliminando campos o añadiendo campos nuevos con sus correspondientes métodos de get y set) lo haremos a pelo directamente en el fichero y para que esos cambios se reflejen en la BD ejecutamos desde consola:
IMPORTANTE: Cuando editemos el fichero entity (por ejemplo Actores.php) y añadamos un nuevo campo hay que añadir también sus características:
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=40)
*/
private $email;
Para modificarlo desde la consola:
php app/console doctrine:schema:update --force
Si deseamos borrar una tabla de la BD será con drop:
php app/console doctrine:schema:drop --force
----------------------------------------------------------------------------
INSERTAR EN LA TABLA DE LA BD
a) Crearlo en el routing de nuestro Budble
Para ejecutarlo:
http://localhost/pruebasymfony/web/app_dev.php/insertarActor
MOSTRAR EL LISTADO DE ESA TABLA DE LA BD
a) Si no existe en el routing de ese Bundle crearlo.
b) En el controller de ese Buddle añadir:
// Para mostrar el de un registro en concreto por su id:
Nos vamos a:
\app\config\parameters.yml y especificamos el nombre de nuestra BD y demás datos (el puerto no es necesario)
Entramos en la consola (Windows+R) y CMD.
Nos vamos a Symfony: D:\wamp\www\pruebasymfony y escribimos:
php app/console doctrine:generate:entity
Especificamos el nombre del Bundle al que pertenece y el nombre de la tabla que queremos crear (en este caso Actores), sería:
cineactoresBundle:Actores
El formato será Annotation
Vamos indicando el nombre de los campos (excepto el Id que se mete solo por defecto) de esa nueva tabla así como el tipo (el listado de tipos lo tienes en: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#property-mapping)
Una vez terminado se habrá creado en \src\cine\actoresBundle una nueva carpeta llamada entity que contiene el fichero Actores.php donde está toda la estructura de la tabla (aunque todavía no está creada en el PHPmyAdmin).
Para crearla volvemos a la consola:
php app/console doctrine:schema:create
Una vez creada si quisieramos modificar el fichero Actores.php (por ejemplo eliminando campos o añadiendo campos nuevos con sus correspondientes métodos de get y set) lo haremos a pelo directamente en el fichero y para que esos cambios se reflejen en la BD ejecutamos desde consola:
IMPORTANTE: Cuando editemos el fichero entity (por ejemplo Actores.php) y añadamos un nuevo campo hay que añadir también sus características:
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=40)
*/
private $email;
Para modificarlo desde la consola:
php app/console doctrine:schema:update --force
Si deseamos borrar una tabla de la BD será con drop:
php app/console doctrine:schema:drop --force
----------------------------------------------------------------------------
INSERTAR EN LA TABLA DE LA BD
a) Crearlo en el routing de nuestro Budble
cineactores_insertarActor:
pattern: /insertarActor
defaults: { _controller: cineactoresBundle:Default:insertarActor }
b) En el controller de nuestro Buddle añadir:
use cine\actoresBundle\Entity\Actores; // para trabajar con esa tabla de la BD
Y añadir el correspondiente método:
public function insertarActorAction() {
// Insertar en BD (lo correcto sería desde un formulario no así escrito a pelo)
$actor = new Actores();
$actor->setNombre("James Stewart");
$actor->setAnnoOscar("1940");
$actor->setTituloPelicula("Historias de philadelphia");
$em = $this->getDoctrine()->getManager();
$em->persist($actor);
$em->flush();
return $this->redirect($this->generateUrl('cineactores_listadoActores'));// lo sacamos del routing
}
Para ejecutarlo:
http://localhost/pruebasymfony/web/app_dev.php/insertarActor
MOSTRAR EL LISTADO DE ESA TABLA DE LA BD
a) Si no existe en el routing de ese Bundle crearlo.
b) En el controller de ese Buddle añadir:
public function listadoActoresAction() {
$repository = $this->getDoctrine()->getRepository('cineactoresBundle:Actores');
$actores = $repository->findAll();
return $this->render('cineactoresBundle:Default:listadoActores.html.twig', array('actores' => $actores)); // que se vaya a esa vista
}
// Para mostrar el de un registro en concreto por su id:
public function showActorAction($id) {
$repository = $this->getDoctrine()->getRepository('cineactoresBundle:Actores');
$actor = $repository->find($id);
return $this->render('cineactoresBundle:Default:showActor.html.twig', array('actor' => $actor));
}
Suscribirse a:
Entradas (Atom)
