Obtener UN registro de la BD (Sentencia SELECT SQL)
class librosActions extends sfActions{ ...
public function executeVer(sfWebRequest $request) {
//Obtener el id del libro por url (get) $id = $request->getParameter('id');
//obtengo el objeto libro
$this->libros = LibrosPeer::retrieveByPK($id); }
…
verSuccess.php
//Accedo a las propiedades (campos de mi objeto/registro libro)
//los GETTERS son funciones gets para leer los campos o propiedades de los objetos Id: <b><?php echo $libros->getLibroId(); ?></b><br>
Nombre: <b><?php echo $libros->getNombreLibro(); ?></b><br> Precio:<b> <?php echo $libros->getPrecio(); ?></b><br>
//Accedo al nombre de la categoría(objeto categoría relacionado) de un libro
Categoria:<b> <?php echo $libros -> getCategorias()->getNombreCategoria();?></b> <br> //Accedo al nombre de la editorial(objeto editorial relacionado) de un libro
Editorial:<b> <?php echo $libros -> getEditores() ->getNombreEditorial(); ?></b> }
Al trabajar con objetos que representan a los registros de la base de datos podemos extraer la información de una forma elegante a través de la notación punto del paradigma de la orientación a objetos. Evidentemente es algo más lento pues hay una traducción interna a sentencias sql
Imaginar hacer eso en php y con sql. Tendríamos que crear los arrays, hacer la conexión con la BD, hacer la SQL y almacenar el resultado en el vector …
Select L.LibroId, L.NombreLibro, L.precio, C.NombreCategoria, E.NombreEditorial From Categorias C, Editorial E, Libros L
Insertar un nuevo registro en la BD (Sentencia INSERT SQL) class librosActions extends sfActions{
…
function executeNew(sfWebRequest $request) {
//categoria_id, editor_id, libro_id son autoincrementales
//los SETTERS son funciones set para modificar los campos o propiedades de los //objetos
//se crea, se rellena y se guarda una categoria $categoria = new Categorias();
$categoria->setNombreCategoria('Redes');
$categoria->save(); //graba en disco.
//se crea, se rellena y se guarda una editorial $editor = new Editores();
$editor->setNombreEditorial('ra-ma'); $editor->save();
//se crea, se rellena y se guarda un libro $this->libro= new Libros();
$this->libro->setNombreLibro('El manual de Symfony 1.2'); $this->libro->setPrecio(45);
$this->libro->setDescripcion('es buenísimo ...'); $this->libro->setEntrega(1);
$this->libro->setImagen('logo_symfony.jpg');
//se enlaza el libro a la categoria y editor creados
$this->libro->setCategoriaid($categoria->getCategoriaid()); $this->libro->setEditorid($editor->getEditorid());
$this->libro->save(); }
El template NewSuccess.php podría tener el mensaje de categoria, editor y libro creados con éxito
Pensar que los valores anteriores deberían de cogerse de los formularios correspondientes a la insercción de una nueva Categoría, Editorial y Libro.
En estos casos deberíamos de haber realizado en nuestra aplicación php las siguientes consultas SQL entre otras 1000 instrucciones php … :
INSERT INTO Categorias ("NombreCategoria") VALUES ("Redes”);
//suponer que se crea la categoria con categoriaId=3 I NSERT INTO Editorial ("NombreEditorial")
VALUES ("Ra-Ma”);
//Suponer que se crea le editorial con editorId=4
INSERT INTO Libros (NombreLibro, Precio, Descripcion, Entrega, Imagen, CategoriaId, EditorId)
VALUES ("El manual de Symfony 1.2”, “Es buenisimo”, 1, “logo...”, 3, 4);
Symfony 1.2
José Antonio Morgado BerruezoJosé Antonio Morgado Berruezo [email protected] [email protected]
Actualizar un registro existente en la BD (Sentencia UPDATE SQL) class librosActions extends sfActions{
…
public function executeEdit(sfWebRequest $request) { $id = $request->getParameter('id'); $this->libros = LibrosPeer::retrieveByPK($id); $this->libros->setPrecio ('34'); $this->libros->save(); }
El template EditSuccess.php podría tener el mensaje de libro actualizado con éxito
UPDATE Libros SET precio = 34 WHERE LibroId = $id
Obtener VARIOS registros (con condiciones) de la BD (Sentencia SELECT SQL)
Idea del Proceso con doSelectRS()
Obtener Libro_id, precio, nombre editorial, nombre categoria cuya entrega>2 class librosActions extends sfActions{
…
public function executeListar(sfWebRequest $request) {
//(paso 1) creamos criteria . Contruimos la SELECT $c = new Criteria();
//(paso 1.1) seleccionamos las columnas: addSelectColumn() de la SELECT $c->addSelectColumn(LibrosPeer::LIBRO_ID);
$c->addSelectColumn(LibrosPeer::PRECIO);
$c->addSelectColumn(EditoresPeer::NOMBRE_EDITORIAL); $c->addSelectColumn(CategoriasPeer::NOMBRE_CATEGORIA);
//(paso 1.2) Construimos la clausula WHERE
//(paso 1.2.1)Hacemos Joins: addJoin() que relacionan tablas por las claves primarias para extraer nombre de categoría y editorial
$c->addJoin(LibrosPeer::EDITORID,EditoresPeer::EDITORID);
$c->addJoin(LibrosPeer::CATEGORIAID,CategoriasPeer::CATEGORIAID); //(paso 1.2.2)Hacemos los filtros: add()
$c->add(LibrosPeer::ENTREGA,2, Criteria::GREATHER_THAN)
//(paso 1.3) Ordenamos los registros u objetos por nombreEditorial $c->addDescendingOrderByColumn(EditoresPeer::NOMBRE_EDITORIAL);
//(paso2) Hacemos la selec: doSelectRS() y obtenemos el resulset (paso 3) $this->libros = LibrosPeer::doSelectRS($c);
Listarsuccess.php
//(paso4) Recorremos el recordset (array de REGISTROS)
<?php while ($libros->next()){ ?>
<h1>Id:</h1><?php echo $libros['libro_id'] = ...); ?>
<h1>Nombre:</h1><?php echo $libros['NombreLibro'] = ...); ?> ...
<?php } ?>
Symfony 1.2
José Antonio Morgado BerruezoJosé Antonio Morgado Berruezo [email protected] [email protected]
Idea del Proceso con doSelect()
public function executeListar(sfWebRequest $request) {
//(paso 1) creamos criteria . Contruimos la SELECT $c = new Criteria();
//Idem (paso1) ...
//(paso2) Hacemos la selec: doSelectRS() y obtenemos el resulset (paso 3) $this->libros = LibrosPeer::doSelect($c);
Listarsuccess.php
//(paso4) Recorremos el array de OBJETOS. <table> <tr> <td>Id</td> <td>Nombre</td> <td>Precio</td> <td>Categoria</td> <td>Editorial</td> </tr>
<?php foreach ($libros as $libro): ?> <tr> <td><?php echo $libros->getLibroId(); ?></td> <td><?php echo $libros->getNombreLibro(); ?></td> <td><?php echo $libros->getPrecio(); ?></td> <td><?php echo $libros->getCategorias()->getNombreCategoria(); ?></td> <td><?php echo $libros->getEditores()->getNombreEditor(); ?></td> $total = $total + $libros->getPrecio();
</tr>
<?php endforeach ?>
Obtener Número de registros (con condiciones) de la BD (Sentencia SELECT Count ... SQL)
Obtener Número de libros cuyo precio > 50 euros class librosActions extends sfActions{
…
public function executeContar(sfWebRequest $request) {
//(paso 1) creamos criteria . Contruimos la SELECT $c = new Criteria();
//(paso 1.1) seleccionamos las columnas: addSelectColumn() de la SELECT $c->addSelectColumn(LibrosPeer::LIBRO_ID);
$c->addSelectColumn(LibrosPeer::NOMBRELIBRO); $c->addSelectColumn(LibrosPeer::PRECIO);
//(paso 1.2.2)Hacemos los filtros: add()
$c->add(LibrosPeer::PRECIO,50, Criteria::GREATHER_THAN)
//(paso2) Hacemos la selec: doSelectRS() y obtenemos el resulset (paso 3) $this->total = LibrosPeer::doCount($c);
ContarSuccess.php //(paso4)
<h1>Total libros: </h1> <?php echo $total ?>
Symfony 1.2
José Antonio Morgado BerruezoJosé Antonio Morgado Berruezo [email protected] [email protected]
Reedefinir el Modelo
libreria/lib/model
Libros.php
El precio del libro es con iva al 16%. Redefinir el método getPrecio() (Redefinir) public function getPrecio()
{
return getPrecio() * 1,16; }
Extender el Modelo
Generar una clave isbn = id_libro/id_editorial/id_categoria (Extender) lib/model/Libros.php (MODELO)
public function getIsbn() {
$isbn = getLibroId().”/”.getEditorId().”/”.getCategoriaId(); return $isbn;
}
frontend/modules/libros/actions/action.class.php (CONTROLADOR) p
ublic function executeListar(sfWebRequest $request)
{ $c = new Criteria(); $this->libros = LibrosPeer::doSelect($c); } ListarSuccess.php (VISTA) <table> <tr> <td>Isbn</td> <td>Nombre</td> <td>Precio</td> <td>Categoria</td> <td>Editorial</td> </tr>
<?php foreach ($libros as $libro): ?> <tr> <td><?php echo $libros->getIsbn(); ?></td> <td><?php echo $libros->getNombreLibro(); ?></td> <td><?php echo $libros->getPrecio(); ?></td> <td><?php echo $libros->getCategorias()->getNombreCategoria(); ?></td> <td><?php echo $libros->getEditores()->getNombreEditor(); ?></td> </tr>