Archivo

Entradas Etiquetadas ‘propel’

Uso de múltiples bases de datos en Symfony con Propel y Organizar el modelo en una estructura de subpaquetes

Jueves, 7 de Enero de 2010 Henry Vallenilla Sin comentarios

A continuación, explicaré como organizar mi PROJECT_DIR/config/databases.yml para múltiples conexiones.

   all:
     propel:
       class:          sfPropelDatabase
       param:
         dsn:          mysql://USERNAME:PASSWORD@DB_HOST_1/DB_NAME

     dataBases2:
       class:          sfPropelDatabase
       param:
         dsn:          mysql://USERNAME:PASSWORD@DB_HOST_2/DB_NAME

Dada esta estructura de mi databases.yml, me obliga a modificar el archivo PROJECT_DIR/config/propel.ini para al momento de realizar symfony propel-build-schema xml con el fin de que se generen los schema.xml que necesito para los distintos modelos del proyecto. Recomiendo cambiar el nombre del esquema por cada conexión que exista, Ejemplo: dataBases2.schema.xml

Lo principal a tener en cuenta es que siempre debe existir una conexión denominada “propel”. Esto es necesario para ciertas cosas, para que funcione correctamente el comando “symfony propel-build-model”, etc especialmente desde los usos schema.yml que el nombre de conexión.

Ahora, cuando vayas a realizar una consulta, sólo tienes que decirle a Propel qué conexión va a utilizar. De forma predeterminada, Propel utiliza la conexión “propel”; Aquí es donde se usa de las dos conexiones definidas en el archivo PROJECT_DIR/config/databases.yml descrito anteriormente:

$c = new Criteria();
$articles = ArticlePeer::doSelect($c, Propel::getConnection('dataBases2'));

Organizar el modelo en una estructura de subpaquetes

La manera de organizar nuestro modelo, es con los schema.xml que generemos; es muy sencillo.

Debemos modificar el atributo package de nuestro schema.xml; este indica la ruta donde se guardan las clases generadas automáticamente. Su valor por defecto es lib/model/, pero se puede modificar
para organizar el modelo en una estructura de subpaquetes. Si por ejemplo no se quieren
mezclar en el mismo directorio las clases del núcleo de la aplicación con las clases
de un sistema de estadísticas, se pueden definir dos esquemas diferentes con los paquetes

lib.model.aberic y lib.model.matatigre

Por último ejecuta el comando symfony propel-build-model y listo.

Un Saludo Cordial

Henry Vallenilla
Desarrollador Symfony
Caracas - Venezuela
Visita - www.matatigre.com

Consulta de actualización utilizando Propel

Miércoles, 18 de Marzo de 2009 Henry Vallenilla Sin comentarios

Esta es otra manera de actualizar uno o varios registros usando Propel:

$con = Propel::getConnection();

// select from...
$c1 = new Criteria();
$c1->add(CommentPeer::POST_ID, $post_id);

// update set
$c2 = new Criteria();
$c2->add(CommentPeer::RATING, 5);

___________________________________________________________________________________________________

Si estas una clase Peer:

$con = Propel::getConnection();

// select from...
$c1 = new Criteria();
$c1->add(self::POST_ID, $post_id);

// update set
$c2 = new Criteria();
$c2->add(self::RATING, 5);

BasePeer::doUpdate($c1, $c2, $con);

BasePeer::doUpdate($c1, $c2, $con);
Categories: Symfony Tags: ,

Error al crear schema.xml

Miércoles, 26 de Noviembre de 2008 David Quiñones Sin comentarios

PHP Fatal error:  Call to undefined function iconv() in /usr/local/php5/lib/php/symfony/vendor/propel-generator/classes/propel/phing/PropelCreoleTransformTask.php on line 768

Para resolver dicho error se debe buscar el archivo extensions.ini

usr/local/php5/etc/extensions.ini

y  descomentar la linea

extension=iconv.so

y por ultimo reiniciar el apache.

Categories: Symfony Tags: , , ,