1. Symfony
Parte 15
Más Consultas SQL– Migración
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 * 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
4. 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
5. 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
6. 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
7. 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
8. 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
14. Paginador
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
15. 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
16. 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
17. 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
21. Criterion:
Para realizar consultas SQL que consideren
comparaciones OR debemos utilizar el método
getNewCriterion. Con este método podemos
indicarle a Criteria cuales son los elementos o los
extremos que se incluirán en una comparación de
este tipo.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
22. $sql = “Select * from capacitaciones where
capacitaciones.region = $region and capacitaciones.estado = ‘A’
and (capacitaciones.fecha_desde like ‘%08%’ or
capacitaciones.fecha_hasta like ‘%08%’)”;
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
23. $sql = “SELECT * FROM periodo_postulacion WHERE
(periodo_postulacion.FECHA_DESDE LIKE ‘%2009%’ OR
periodo_postulacion.FECHA_HASTA LIKE ‘%2009%’) ORDER BY
periodo_postulacion.ID DESC LIMIT 50”;
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
24. $sql = “SELECT * FROM periodo_postulacion WHERE
(periodo_postulacion.ID <> $idPeriodo AND
periodo_postulacion.FECHA_DESDE <= $fechaHasta AND
periodo_postulacion.ESTADO = ‘A’) LIMIT 1”;
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
25. $sql = “SELECT * FROM fichas_postulacion WHERE
((fichas_postulacion.NOMBRE LIKE ‘%rigoberto%’ OR
fichas_postulacion.APELLIDO_PAT LIKE ‘%rigoberto%’ ) OR
fichas_postulacion.APELLIDO_MAT LIKE ‘%rigoberto%’ ) ORDER
BY fichas_postulacion.ID DESC”;
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
27. freeze:
Symfony provee de una utilidad vía comando que
permite congelar un proyecto, es decir, incluye las
librerías de Symfony necesarias en los directorios
data/, lib/ y web/. Una vez congelado, el proyecto
se transforma en una aplicación independiente y
completamente ejecutable por sí misma.
#./symfony freeze
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
28. unfreeze:
Symfony, como es lógico, provee también de una
utilidad para descongelar un proyecto, o devolverlo
a su estado original. Para ello utilizamos la tarea
unfreeze. Esta tarea borra los directorios data/
symfony/, lib/symfony/ y web/sf/.
#./symfony unfreeze
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
29. rsync
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
30. rsync:
Es una utilidad de linea de comandos capaz de
realizar transferencias incrementales. Las
transferencias incrementales transfiere los archivos
modificados de manera completa.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
31. rsync + ssh:
Symfony utiliza SSH conjuntamente con rsync para
hacer más segura la transferencia de archivos de un
equipo de desarrollo al servidor de producción.
Las opciones de configuración utilizada por el cliente
ssh se encuentran en el archivo config/
properties.ini del proyecto.
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
34. rsync :
• Symfony provee de un comando que ejecuta
internamente rsync en el modo de prueba, es decir,
muestra los archivos que tienen que ser
sincronizados.
#./symfony project:deploy server-produccion
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
35. rsync :
• Para realizar la sincronización definitivamente se
debe incluir al comando anterior la opción --go.
#./symfony project:deploy server-produccion --go
Rodrigo Miranda
Blog: www.rodrigomiranda.cl
36. Preguntas?
Rodrigo Miranda
Blog: www.rodrigomiranda.cl