Estos dias empecé a desarrollar una aplicación con el FrameWork Symfony y ahora quiero escribir (traducir algo tal vez) sobre el modelo y aclararme las ideas.
Las bases de datos son relacionales, encambio php5 y Symfony son orientados a objeto, entonces para acceder a los datos necesitamos una capa que traduzca la logica objeto a la logica relacional, esta capa se llama ORM (object-relational mapping).
Esta capa de abstracción esta basada en el proyecto Propel. Basicamente, podemos acceder y modificar datos de una base-de-datos de forma sencilla utilizando la logica objeto y no los clasicos Update y Select de sql.
Uno de los beneficios principales es que no necesitamos una sintaxis especifica para cada base de datos (Mysql, Oracle, LiteSql,etc), sino que utilizamos un lenguaje XML universal y propel se encargará de traducirlo para cada base de datos.
Por ejemplo, tenemos una tabla llamada clientes, que tiene 2 campos: firstname, lastname y nosotros necesitamos su nombre completo, entonces solo crearemos un metodo getName asi:
public function getName()
{
return $this->getFirstName.’ ‘.$this->getLastName();
}
O por ejemplo queremos obtener un libro de una base-de-datos, cambiar su titulo y luego guardarlo.
$book = BookPeer::retrieveByPK(5);
$book->setTitle(‘The Propel Story’);
$book->save();
Como ven se trabaja con la filosofía objeto, independientemente del motor de base de datos que tenemos y sin utilizar setencias SQL.
El proceso
Primero crearemos un archivo llamado schema.xml, por ejemplo así:
Atención: Si ya tenemos nuestra base-de-datos armada, podremos construir el archivo schema.xml automaticamente utilizando ingenieria inversa, solo necesitamos configurar en propel.ini, la conección, el usuario, la clave, etc de esta forma: propel.database.url = mysql://username:password@localhost/databasename y a continuación symfony propel-build-schema
Este archivo se puede crear a mano o utilizando el DBDesigner 4, si utilizamos el DBDesigner lo grabaremos en XML, pero como no es compatible con el XML de proper, utilizaremos un conversor desde DBDesigner a Propel Schema, aqui esta su dirección. Una vez que tenemos nuestro schema.xml utilizaremos propel para construir nuestro modelo, en sympony tenemos
que escribir symfony propel-build-model solamente.
A continuación Propel utiliza un Generador, este generador lee los archivos XML y construye las clases PHP que interactuaran con tu modelo de datos y el archivo de definiciones SQL, con el cual se pueden crear las tablas, las relaciones, las keys, etc. Para generar el modelo de las clases utiliza Phing v2,además utiliza Creole, que es una capa de abtracción para base-de-datos. Medio complicado pero no es importante ya que este proceso es automatico.
Luego de este proceso obtendremos unos archivos php que poseen las clases y metodos para acceder a los campos de las tablas (por ejemplo getTitle()). En un archivo aparte llamado databases.yml deberemos configurar el tipo de base de datos que utilizaremos.
Y como ultimo paso deberemos crear las tablas, relaciones, etc, en nuestra base de datos, para eso con Symfony generaremos un archivo .sql de esta forma: symfony propel-build-sql
Con el archivo .sql contruiremos el modelo en nuestra base de datos.






Saludos…muy interesante esto del Symphony, pero no entiendo muy bien que es si me lo explicas en español claro y simple te lo agradecería…
Muy buen blog…felicidades…