Mejorando Propel con sfPropelFinder

Propel es el ORM que utiliza Symfony por defecto y que seguirá utilizando en las próximas versiones. Muchos usuarios creen que su punto débil es la falta de rendimiento y parece que la próxima versión 1.3 presenta mejoras importantes en ese aspecto.

Sin embargo, uno de los puntos débiles más importantes de Propel y que no va a corregirse próximamente es la cantidad de código que se debe escribir para realizar hasta las consultas más sencillas.

Afortunadamente, el gran François Zaninotto acaba de presentar su último plugin llamado sfPropelFinder y que soluciona este problema. Utilizando este plugin es posible realizar consultas mediante Propel de forma mucho más compacta.

En este primer ejemplo, se realiza la consulta con Criteria() y Peer:

$c = new Criteria()
$c->add(ArticuloPeer::TITULO, '%symfony', Criteria::LIKE);
$c->add(ArticuloPeer::IS_PUBLICADO, true);
$c->addAscendingOrderByColumn(ArticuloPeer::CREATED_AT);
$articulos = ArticuloPeer::doSelect($c);

Utilizando sfPropelFinder, la misma consulta se puede escribir de la siguiente forma (se muestra en varias líneas para verlo más claro):

$articulos = sfPropelFinder::from('Articulo')->
               where('Titulo', 'like', '%symfony')->
               _and('IsPublicado', true)->
               orderBy('CreatedAt')->
               find();

Si utilizas la librería jQuery de JavaScript o el fantástico sfFinder para crear tareas de Symfony, habrás reconocido la sintaxis tan elegante y compacta que encadena llamadas a métodos para realizar tareas complejas.

La documentación del plugin incluye muchos otros ejemplos que demuestran las posibilidades de sfPropelFinder:

// Buscar 3 artículos
$articulos = sfPropelFinder::from('Articulo')->find(3);    

// Buscar los artículos publicados antes que el valor devuelto por time()
$buscadorArticulos = sfPropelFinder::from('Articulo');
$articulos = $buscadorArticulos->where('PublishedAt', '<', time())->find();

// Contar todos los artículos disponibles
$numArticulos = sfPropelFinder::from('Articulo')->count();

Aunque el plugin aún se encuentra en fase de desarrollo, ya soporta la creación de JOINS. En el siguiente ejemplo se obtiene el primer artículo que tenga un comentario asociado cuyo contenido sea "Es un artículo excelente":

$articulo = sfPropelFinder::from('Articulo')->
  join('Comentario')->
  where('Comentario_Contenido', 'Es un artículo excelente')->
  findOne();

También es posible utilizar directamente métodos de Criteria() mezclados con los métodos del Finder. Por último, también es posible extender los métodos del Finder para cualquier objeto de la aplicación. De esta forma, se pueden crear muy fácilmente consultas tan concisas, claras y espectaculares como la siguiente:

$articulos= $buscador->
  recientes()->
  conComentarios()->
  noAnonimos()->
  conBuenaPuntuacion()->
  find();

Puedes consultar la documentación de sfPropelFinder para ver muchos más ejemplos de uso, para saber cómo se instala y configura el plugin y para conocer sus limitaciones actuales.

Fuente: sfPropelFinder is like jQuery for Propel

Comentarios

  1. Habrá que ver su avance, y si abre mecanismo de apoyo para que se potencie rápidamente este plug-in. Por lo pronto, trataré de apoyar ya que realmente es eficiente, rápida e intuitiva su forma de trabajar; por lo que podríamos estar presente ante un real aporte.

    Rodrigo Miranda el 1 de abril de 2008, 17:30:53

Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente unos meses después de su publicación para asegurar que estos sigan siendo relevantes.

Publicada el

1 de abril de 2008

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.