• No se han encontrado resultados

//obtengo el objeto libro $this->libros = LibrosPeer::retrieveByPK($id);

N/A
N/A
Protected

Academic year: 2021

Share "//obtengo el objeto libro $this->libros = LibrosPeer::retrieveByPK($id);"

Copied!
7
0
0

Texto completo

(1)

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

(2)

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 Berruezo

José Antonio Morgado Berruezo [email protected] [email protected]

(3)

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

(4)

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 Berruezo

José Antonio Morgado Berruezo [email protected] [email protected]

(5)

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 ?>

(6)

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 Berruezo

José Antonio Morgado Berruezo [email protected] [email protected]

(7)

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>

Referencias

Documento similar

NOMBRE CURSO TIPO CURSO DEPARTAMENTO PROFESORADO UNED COLABORADORES PRECIO ENTIDAD..

Al comienzo se pondrán los datos del libro reseñado: Nombre y apellidos, Título del libro en cursiva, lugar de edición (en la misma lengua en la que aparece en el libro), editorial,

NOMBRE CURSO TIPO CURSO DEPARTAMENTO PROFESORADO UNED COLABORADORES PRECIO ENTIDAD..

NOMBRE CURSO TIPO CURSO DEPARTAMENTO PROFESORADO UNED COLABORADORES PRECIO ENTIDAD..

T02.019- Fecha y usuario del pedido, código, nombre, marca, pvp y precio de venta de los artículos solicitados en el pedido número 1 que sean televisores... select cod,nombre,'tiene

Cuerpo: PROFESORES TÉCNICOS DE FORMACIÓN PROFESIONAL 219. Especialidad: PROCEDIMIENTOS DE DIAGNOSTICO CLINICO

Cuerpo: PROFESORES TÉCNICOS DE FORMACIÓN PROFESIONAL 026. Especialidad: APOYO AL

public class TestFrameworkClassLoader extends URLClassLoader{. private static