Symfony
            Parte 14
                     Consultas sql - Paginador




 Rodrigo Miranda
    rmiranda@poodu.cl
contacto@rodrigomiranda.cl
http://www.rodrigomiranda.cl
Consultas
SQL
‐
Propel:


           SELECT * FROM autor



 $autores = AutorPeer::doSelect(new Criteria());




                      Rodrigo Miranda
                  Blog: www.rodrigomiranda.cl
Consultas
SQL
‐
Propel:


SELECT * FROM post WHERE post.id_autor =
$id_autor Order By post.id asc limit 2

$c = new Criteria();
$c->add(PostPeer::ID_AUTOR, $id_autor);
$c->addAscendingOrderByColumn(PostPeer::ID);
$c->setLimit(2);
$autores = PostPeer:doSelect($c);



                           Rodrigo Miranda
                       Blog: www.rodrigomiranda.cl
Consultas
SQL
‐
Propel:


SELECT * FROM post WHERE post.id_autor =
$id_autor Order By post.id desc limit 2

$c = new Criteria();
$c->add(PostPeer::ID_AUTOR, $id_autor);
$c->addDescendingOrderByColumn(PostPeer::ID);
$c->setLimit(2);
$autores = PostPeer:doSelect($c);



                          Rodrigo Miranda
                      Blog: www.rodrigomiranda.cl
Consultas
SQL
‐
Propel:


SELECT * FROM autor WHERE autor.id =
post.id_autor

$c = new Criteria();
$c->addJoin(AutorPeer::ID, PostPeer::ID_AUTOR);
$autores = AutorPeer:doSelect($c);




                            Rodrigo Miranda
                        Blog: www.rodrigomiranda.cl
Consultas
SQL
‐
Propel:


SELECT * FROM autor LEFT JOIN post ON
(post.id_autor = autor.id)

$c = new Criteria();
$c->addJoin(AutorPeer::ID, PostPeer::ID_AUTOR,
Criteria::LEFT_JOIN);
$autores = AutorPeer:doSelect($c);




                           Rodrigo Miranda
                       Blog: www.rodrigomiranda.cl
Consultas
SQL
‐
Propel:


SELECT * FROM autor WHERE autor.nombre LIKE
‘%Rodrigo%’

$c = new Criteria();
$c->add(AutorPeer::NOMBRE, ‘%Rodrigo%’, Criteria::LIKE);
$autores = AutorPeer:doSelect($c);




                            Rodrigo Miranda
                        Blog: www.rodrigomiranda.cl
Consultas
SQL
‐
Propel:


SELECT autor.id, autor.nombre FROM autor


$c = new Criteria();
$c->addSelectColumn(AutorPeer::ID);
$c->addSelectColumn(AutorPeer::NOMBRE);
 $autores = AutorPeer:doSelect($c);




                          Rodrigo Miranda
                      Blog: www.rodrigomiranda.cl
Consultas
Personalizadas





            Rodrigo Miranda
        Blog: www.rodrigomiranda.cl
Consultas
SQL
personalizadas
$c = Propel::getConnection();
$query = “select avg(“.AutorPeer::EDAD.”) as promedioedad FROM
   “.AutorPeer::TABLE_NAME;
$sentencia = $c->prepare($query);
$sentencia->execute();
return $sentencia->fetch(PDO::FETCH_OBJ);


}


                           Rodrigo Miranda
                       Blog: www.rodrigomiranda.cl
Consultas
SQL
personalizadas
$c = Propel::getConnection();
$query = “select edad as edadautor FROM
   “.AutorPeer::TABLE_NAME;
$sentencia = $c->prepare($query);
$sentencia->execute();
return $sentencia->fetch(PDO::FETCH_OBJ);


}


                          Rodrigo Miranda
                      Blog: www.rodrigomiranda.cl
Consultas
SQL
personalizadas
public static function getConsultaPreparada()
 {
      $arreglo_resultado = array();
      $resultados = array();
      $c = Propel::getConnection();
      $query = "SELECT ".AutorPeer::ID." AS getId,".AutorPeer::NOMBRE." AS
     etiqueta,".AutorPeer::DIRECCION." as direccion FROM ".AutorPeer::TABLE_NAME;
      $stmt = $c->prepare($query);
      $stmt->execute();
      while($row = $stmt->fetch()){
         $arreglo_resultado['getId'] = $row['getId'];
         $arreglo_resultado['etiqueta'] = $row['etiqueta'];
          $arreglo_resultado['direccion'] = $row['direccion'];
          $resultados[] = $arreglo_resultado;
      }

      return $resultados;
 }
                                          Rodrigo Miranda
                                      Blog: www.rodrigomiranda.cl
Template
 <?php foreach ($autor_list as $autor): ?>
 <tr>
  <td><a href="<?php echo url_for('autor/edit?id='.
 $autor['getId']) ?>"><?php echo $autor['getId'] ?></a></td>
  <td><?php echo $autor['etiqueta'] ?></td>
  <td><?php echo $autor['direccion'] ?></td>
 </tr>
 <?php endforeach; ?>




                         Rodrigo Miranda
                     Blog: www.rodrigomiranda.cl
Paginador





    Rodrigo Miranda
Blog: www.rodrigomiranda.cl
Paginador:

 Cuando una consulta doSelect() devuelve un gran
 número de registros, es necesario un páginador que
 permita controlar la cantidad de registro por página,
 mejorando con ello la usabilidad de la aplicación y el
 control de memoria.




                       Rodrigo Miranda
                   Blog: www.rodrigomiranda.cl
sfPropelPager:

 Symfony incluye la clase sfPropelPager para
 páginar los resultados de una consulta. Esta clase
 utiliza la capa de abstracción de Propel.




                      Rodrigo Miranda
                  Blog: www.rodrigomiranda.cl
Como
u:lizamos
sfPropelPager:

$pager = new sfPropelPager(‘nombreModelo’, numeroPorPágina);
$pager->setCriteria($c); //$c = contiene la consulta Criteria
$pager->setPage(numeroPagina);
$pager->init();
return $pager;




                          Rodrigo Miranda
                      Blog: www.rodrigomiranda.cl
Métodos
disponible
Template:




                   Rodrigo Miranda
               Blog: www.rodrigomiranda.cl
Nuestro
Módulo
Encuesta





            Rodrigo Miranda
        Blog: www.rodrigomiranda.cl
Nuestra
accion
index
Módulo
Encuesta:





                     Rodrigo Miranda
                 Blog: www.rodrigomiranda.cl
En
EncuestaPeer:





                        Rodrigo Miranda
                    Blog: www.rodrigomiranda.cl
app.yml
de
nuestra
aplicación:





                      Rodrigo Miranda
                  Blog: www.rodrigomiranda.cl
Template:





                 Rodrigo Miranda
             Blog: www.rodrigomiranda.cl
Paginador:





                  Rodrigo Miranda
              Blog: www.rodrigomiranda.cl
Preguntas?




    Rodrigo Miranda
Blog: www.rodrigomiranda.cl

Symfony parte 14 Consultas SQL - Páginador

  • 1.
    Symfony Parte 14 Consultas sql - Paginador Rodrigo Miranda rmiranda@poodu.cl contacto@rodrigomiranda.cl http://www.rodrigomiranda.cl
  • 2.
    Consultas
SQL
‐
Propel: SELECT * FROM autor $autores = AutorPeer::doSelect(new Criteria()); Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 3.
    Consultas
SQL
‐
Propel: SELECT * FROMpost WHERE post.id_autor = $id_autor Order By post.id asc limit 2 $c = new Criteria(); $c->add(PostPeer::ID_AUTOR, $id_autor); $c->addAscendingOrderByColumn(PostPeer::ID); $c->setLimit(2); $autores = PostPeer:doSelect($c); Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 4.
    Consultas
SQL
‐
Propel: SELECT * FROMpost WHERE post.id_autor = $id_autor Order By post.id desc limit 2 $c = new Criteria(); $c->add(PostPeer::ID_AUTOR, $id_autor); $c->addDescendingOrderByColumn(PostPeer::ID); $c->setLimit(2); $autores = PostPeer:doSelect($c); Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 5.
    Consultas
SQL
‐
Propel: SELECT * FROMautor WHERE autor.id = post.id_autor $c = new Criteria(); $c->addJoin(AutorPeer::ID, PostPeer::ID_AUTOR); $autores = AutorPeer:doSelect($c); Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 6.
    Consultas
SQL
‐
Propel: SELECT * FROMautor LEFT JOIN post ON (post.id_autor = autor.id) $c = new Criteria(); $c->addJoin(AutorPeer::ID, PostPeer::ID_AUTOR, Criteria::LEFT_JOIN); $autores = AutorPeer:doSelect($c); Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 7.
    Consultas
SQL
‐
Propel: SELECT * FROMautor WHERE autor.nombre LIKE ‘%Rodrigo%’ $c = new Criteria(); $c->add(AutorPeer::NOMBRE, ‘%Rodrigo%’, Criteria::LIKE); $autores = AutorPeer:doSelect($c); Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 8.
    Consultas
SQL
‐
Propel: SELECT autor.id, autor.nombreFROM autor $c = new Criteria(); $c->addSelectColumn(AutorPeer::ID); $c->addSelectColumn(AutorPeer::NOMBRE); $autores = AutorPeer:doSelect($c); Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 9.
    Consultas
Personalizadas
 Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 10.
    Consultas
SQL
personalizadas $c = Propel::getConnection(); $query= “select avg(“.AutorPeer::EDAD.”) as promedioedad FROM “.AutorPeer::TABLE_NAME; $sentencia = $c->prepare($query); $sentencia->execute(); return $sentencia->fetch(PDO::FETCH_OBJ); } Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 11.
    Consultas
SQL
personalizadas $c = Propel::getConnection(); $query= “select edad as edadautor FROM “.AutorPeer::TABLE_NAME; $sentencia = $c->prepare($query); $sentencia->execute(); return $sentencia->fetch(PDO::FETCH_OBJ); } Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 12.
    Consultas
SQL
personalizadas public static functiongetConsultaPreparada() { $arreglo_resultado = array(); $resultados = array(); $c = Propel::getConnection(); $query = "SELECT ".AutorPeer::ID." AS getId,".AutorPeer::NOMBRE." AS etiqueta,".AutorPeer::DIRECCION." as direccion FROM ".AutorPeer::TABLE_NAME; $stmt = $c->prepare($query); $stmt->execute(); while($row = $stmt->fetch()){ $arreglo_resultado['getId'] = $row['getId']; $arreglo_resultado['etiqueta'] = $row['etiqueta']; $arreglo_resultado['direccion'] = $row['direccion']; $resultados[] = $arreglo_resultado; } return $resultados; } Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 13.
    Template <?php foreach($autor_list as $autor): ?> <tr> <td><a href="<?php echo url_for('autor/edit?id='. $autor['getId']) ?>"><?php echo $autor['getId'] ?></a></td> <td><?php echo $autor['etiqueta'] ?></td> <td><?php echo $autor['direccion'] ?></td> </tr> <?php endforeach; ?> Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 14.
    Paginador
 Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 15.
    Paginador: Cuando unaconsulta doSelect() devuelve un gran número de registros, es necesario un páginador que permita controlar la cantidad de registro por página, mejorando con ello la usabilidad de la aplicación y el control de memoria. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 16.
    sfPropelPager: Symfony incluyela clase sfPropelPager para páginar los resultados de una consulta. Esta clase utiliza la capa de abstracción de Propel. Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 17.
    Como
u:lizamos
sfPropelPager: $pager = newsfPropelPager(‘nombreModelo’, numeroPorPágina); $pager->setCriteria($c); //$c = contiene la consulta Criteria $pager->setPage(numeroPagina); $pager->init(); return $pager; Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 18.
    Métodos
disponible
Template: Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 19.
    Nuestro
Módulo
Encuesta
 Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 20.
    Nuestra
accion
index
Módulo
Encuesta:
 Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 21.
    En
EncuestaPeer:
 Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 22.
    app.yml
de
nuestra
aplicación:
 Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 23.
    Template:
 Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 24.
    Paginador:
 Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • 25.
    Preguntas?
 Rodrigo Miranda Blog: www.rodrigomiranda.cl