- EL CONOCIMIENTO ES Y DEBE SER LIBRE -

miércoles, febrero 03, 2010

Cargar múltiples modelos con Doctrine

Doctrine nos brinda la posibilidad de partir nuestro “modelo” en varios “sub-modelos” consiguiente con esto separar la lógica del negocio.
/******** Archivo bootstrap.php **********************/
require_once(dirname(__FILE__) . '/doctrine-1.2.1/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));

$pathmodels=array();
array_push($pathmodels,dirname(__FILE__)."/models/cayetano");
array_push($pathmodels,dirname(__FILE__)."/models/plantillas");

Doctrine::loadModels($pathmodels);

$dsn = 'pgsql:dbname=cayetano;host=127.0.0.1';
$user='postgres';
$password='123456';

//$dbh = new PDO($dsn, $user, $password);
$conn = Doctrine_Manager::connection(array($dsn, $user, $password));

En el ejemplo anterior dentro de la carpeta "models” se ha creado la carpeta “cayetano” y la carpeta “plantillas”.

martes, febrero 02, 2010

Multiples Base de Datos con Doctrine

Cuando queremos intercambiar la conexión entre dos o más base de datos en la misma aplicación, lo podemos realizar modificando el archivo bootstrap.php:
/************** Archivo bootstrap.php **********************/
require_once(dirname(__FILE__) . '/doctrine-1.2.1/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));

Doctrine::loadModels('models');

$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine::ATTR_VALIDATE, Doctrine::VALIDATE_ALL); 
$manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);

$dsn = 'pgsql:dbname=cayetano;host=127.0.0.1';
$user='postgres';
$password='123456';
//nombramos a esta conexion como 'cayetano'
$conn = Doctrine_Manager::connection(array($dsn, $user, $password),'cayetano');

$dsn = 'pgsql:dbname=documentacion;host=127.0.0.1';
$user='postgres';
$password='123456';
//nombramos a esta conexion como 'documentacion'
$conn = Doctrine_Manager::connection(array($dsn, $user, $password)),'documentacion');

Para probar el uso lo podemos hacer del siguiento modo:

/************** archivo prueba.php **********************/
require_once('bootstrap.php');

$manager = Doctrine_Manager::getInstance();
$manager->setCurrentConnection('cayetano');
 //Accedemos a la BD cayetano
 $q = Doctrine_Query::create()
  ->select('t.*,u.log_usu,u.pass_usu')
  ->from('Trabajador t')
  ->innerJoin('t.UsuIntranet u');
    
 print_r($q->execute(array(),Doctrine::HYDRATE_ARRAY));
 
$manager = Doctrine_Manager::getInstance();
$manager->setCurrentConnection('documentacion');
 //Accedemos a la BD documentacion
 $q = Doctrine_Query::create()
    ->from('Empleado d')
    ->leftJoin('d.EmpleadoCargo g')    
    ->leftJoin('g.Cargo h')
    ->leftJoin('h.Oficina w')    
    ->where('d.idusuario = ?', $idUsuario)
    ->orderBy('w.descripcion,h.descripcion,g.id');
 
 print_r($q->execute(array(),Doctrine::HYDRATE_ARRAY));