/***** 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); //ACTIVAMOS LAS VALIDACIONES DE DOCTRINE $manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);//PARA LA CREACION DE LOS METODOS $dsn = 'mysql:dbname=comercial;host=127.0.0.1'; $user='root'; $password='123456'; $conn = Doctrine_Manager::connection(array($dsn, $user, $password));
La línea 9 le dice a Doctrine que cargué unas clases que vamos a crear en donde implementaremos los métodos. Estas clases deben de tener la siguiente forma [nombreClase]Table y las colocaremos dentro de la carpeta “models”.
En nuestro ejemplo en particular crearemos la clase UsuarioTable.
/**** UsuarioTable.php *******/ class UsuarioTable extends Doctrine_Table { public function GetAllUsuarios() { $q=Doctrine_Query::create() ->from('Usuario u') ->execute(); return $q->toArray(); } public function GetAllCargosByOficina($idUsuario,$idOficina) { $q=Doctrine_Query::create() ->from('Oficina o') ->leftJoin('o.Cargo c') ->leftJoin('c.Asignacion a') ->leftJoin('a.Empleado e') ->leftJoin('e.Usuario u') ->where('o.id=?',$idOficina) ->andWhere('u.id=?',$idUsuario) ->execute(); return $q->toArray(true); } public function GetAllCargos($idUsuario) { $q=Doctrine_Query::create() ->from('Cargo c') ->leftJoin('c.Asignacion a') ->leftJoin('a.Empleado e') ->leftJoin('e.Usuario u') ->where('u.id=?',$idUsuario) ->execute(); return $q->toArray(true); } }
Para probar el funcionamiento crearemos un archivo pruebaUsuario.php
/******** pruebaUsuario.php***********/ require_once("bootstrap.php"); $obj= Doctrine::getTable("Usuario"); print_r($obj->GetAllCargos(1)); print_r($obj->GetAllCargosByOficina(1,1));
Haciendo uso de DQL podemos ver que la consultas son bastante sencillas y demandan poco esfuerzo, la clave aquí es el método “toArray()” este método es una forma de serializar (Hydration, en realidad hay muchas formas de hydration) los datos en forma de arrays(objetos). El método “toArray()” puede recibir un parámetro booleano si este es false, nos mostrara el resultado teniendo en cuenta los “join” realizados en la consulta DQL. En caso sea true ocurrirá lo contrario.
Si es que estas trabajando por capas estos resultados hidratados son los que fluyen entre capas.
En mi particular experiencia si estas utilizando el patrón MVP (Model View Presenter) a estos datos hidratados le pasas la función “encode_json()” y se lo envías a la Vista (DHTMLX, GWT,FLASH, etc)
1 comentario:
Si, probablemente lo sea
Publicar un comentario