Propel, un orm para PHP
Ayer un compañero de trabajo me habló de propel el cual no conocía (gracias Juanjo :-)). Es un orm para php basado en torque competencia directa del conocido hibernate en el mundo j2ee.
Propel está disponible en los repositorios de pear por lo que su instalación puede llegar a ser de lo mas sencillo si utilizamos estos repositorios:
-
sudo pear channel-discover pear.phpdb.org
-
sudo pear install phpdb/propel_generator
-
sudo pear install phpdb/propel_runtime
o igualmente sencilla al estilo tradicional, descargamos paquetes, descomprimimos paquetes :-).
Propel depende de otros paquetes pear que necesitamos tener instalados (phing, creole y opcionalmente Log):
-
sudo pear channel-discover pear.phing.info
-
sudo pear install phing/phing
-
-
sudo pear channel-discover pear.phpdb.org
-
sudo pear install phpdb/creole
-
sudo pear install phpdb/jargon
También necesitaremos el modulo php5-xls si no lo tenemos ya, un simple apt-get install php5-xls bastará en ubuntu.
En el directorio propel/generator/projects tenemos un proyecto "bookstore" que utilizaremos para nuestra primera toma de contacto. Tenemos 3 ficheros:
- build.properties: Definimos las propiedades de nuestro proyecto necesarias para generar nuestros modelos a partir de las definiones xml.
- runtime-conf.xml: Definimos las propiedades de nuestro proyecto, nombre, conexión con BD, paquetes de clases a generar, etc, a utilizar en nuestro proyecto, este xml se trasformará una vez construido el modelo de clases en un array de datos definido en nuestro próximo fichero de configuración.
- shema.xml: La definición de nuestro modelo de datos a partir del que generar el modelo de clases y los scripts .sql necesarios para generar nuestra BD.
Una vez tenemos los ficheros anteriores correctamente configurados simplemente necesitaremos ejecutar:
-
./propel-gen ../projects/bookstore
Script que encontramos en propel/generator/bin y que nos genera dentro de nuestro proyecto un directorio build con:
- clases: Todas las clases que representan a nuestro modelo de datos y a través de las cuales nos comunicaremos con nuestra BD.
- conf: Nuestros ficheros de configuración, aquel generado a partir del anterior runtime-conf.xml.
- sql: Los scripts *.sql para contruir nuestra BD.
El que para generar una entidad necesite crear 5 ficheros me resulta engorroso, creo que muchas de las funcionalidades escritas en estas clases deberían estar incluidas en el núcleo propel:
- Entidad.php: Clase vacía que deberemos utilizar para extender la funcionalidad de esta entidad.
- EntidadPeer.php: Clase vacía que deberemos utilizar para extender las operaciones de consulta y actualización contra la tabla a la que representa esta entidad.
- om/BaseEntidad.php: Clase generada con todos los atributos getters&setters y demás operaciones de nuestro modelo definido en el xml.
- om/BaseEntidadPeer.php: Operaciones básicas de consulta y actualización contra la BD a la que representa esta entidad.
- map/EntidadMapBuilder.php
No creo que lo utilice por ahora, me gustaría que tuviera un nivel abstracción mayor sin tener que recurrir a la generación de código, y por otro lado el proyecto al que podría aplicarlo ahora mismo estimamos que deberá soportar una gran cantidad de tráfico y creo que nuestros DAOS serán mas eficientes, de todas formas lo seguiré de cerca.
Os dejo una presentación de Hans Lellelid (uno de los directores del proyecto):

















Pues está bien sí, aunque opino lo mismo en cuanto que le falta algo de abstracción como trabajar al aire sobre mapeados de objetos contra la base de datos (al más puro estilo OJB). Pero es un buen comienzo (seguro que llegarán a eso) y muy interesante la herencia de tablas y la solución integrada de los árboles como nested set’s. Gracias por tenernos al tanto (a Juanjo también, aunque no tenga el gusto de conocerlo
Hola, interesante articulo, pero tengo una problema, no se si pueden ayudarme segui el tutor pero sela un error de DataBase no asignado y user no permitido…?
Fatal error: Uncaught exception ‘PropelException’ with message ‘Unable to open PDO connection [wrapped: SQLSTATE[28000] [1045] Access denied for user ‘ODBC’@'localhost’ (using password: NO)]’ in C:\xampp\php\PEAR\propel\Propel.php:610 Stack trace: #0 C:\xampp\php\PEAR\propel\Propel.php(523): Propel::initConnection(Array, ‘bookstore’) #1 C:\xampp\htdocs\test1\bookstore\om\BaseBook.php(427): Propel::getConnection(’bookstore’, ‘write’) #2 C:\xampp\htdocs\test1\index.php(28): BaseBook->save() #3 {main} thrown in C:\xampp\php\PEAR\propel\Propel.php on line 610
bueno creo que es la configuracio bookstore-conf.php… alguien puede ayudarme… la coneecion es para MYSQL