/* Archivo generarModels.php */ require_once(dirname(__FILE__) . '/Doctrine-1.2.0/lib/Doctrine.php'); spl_autoload_register(array('Doctrine', 'autoload')); /* Nos conectamos a la DB*/ $dsn = 'mysql:dbname=comercial;host=127.0.0.1'; $user='root'; $password='123456'; /* Conexion a postgre $dsn = 'pqsql:dbname=comercial;host=127.0.0.1'; $user='postgres'; $password='123456'; */ $dbh = new PDO($dsn, $user, $password); $conn = Doctrine_Manager::connection($dbh); /* Metodo que nos genera los modelos */ Doctrine_Core::generateModelsFromDb('carpetaDeModelos');
Enseguida procedemos a ejecutar el archivo generarModels.php (http://localhost/generarModels.php) y tendremos en la carpeta "carpetaDeModelos" los modelos para empezar a probar Doctrine.
Ahora procedemos a modificar el archivo bootstrap.php y creamos el archivo dqlTestDoctrine.php. Por Favor, antes de ejecutar dqlTestDoctrine.php dirígete a la clase generada y añade require_once según corresponda, en mi caso, quedo así:
/** * Cliente * * This class has been auto-generated by the Doctrine ORM Framework * * @package ##PACKAGE## * @subpackage ##SUBPACKAGE## * @author ##NAME## <##EMAIL##> * @version SVN: $Id: Builder.php 6820 2009-11-30 17:27:49Z jwage $ */ require_once('generated/BaseCliente.php'); class Cliente extends BaseCliente { }
/* Archivo dqlTestDoctrine.php */ require_once('bootstrap.php')/*extremadamente importante*/ $q=Doctrine_Query::create() ->select('u.*') /*todos los campos*/ ->from('Cliente u'); /*selecionamos la clase Cliente*/ print_r($q->execute()->toArray()); /*nos muestra el resultado como un array*/
/* Archivo bootstrap.php */ require_once(dirname(__FILE__) . '/Doctrine-1.2.0/lib/Doctrine.php'); spl_autoload_register(array('Doctrine', 'autoload')) Doctrine::loadModels('carpetaDeModelos'); $dsn = 'mysql:dbname=comercial;host=127.0.0.1'; $user='root'; $password='123456'; $dbh = new PDO($dsn, $user, $password); $conn = Doctrine_Manager::connection($dbh);
En mi particular experiencia esta ingeniería inversa tiene algunos inconveniente(por lo menos en postgreSQL) que son los siguientes:
- Cuando se encuentran claves primarias compuestas el modelo generado solo mapea una clave primaria, entonces hay que modificar a mano en el modelo generado colocando como clave primaria la clave que obvio Doctrine.
- Si están trabajando con PosgreSql y estas utilizando esquemas entonces tendrás que modificar en el modelo generado el nombre de la tabla mapeada anteponiendo el nombre del esquema.
En el siguiente post crearemos un modelo y empezaremos a utilizar DQL(Doctrine Query Language)
Doctrine Php Object Relational Mapper
View more documents from Jonathan Wage.
1 comentario:
hola me sirvio mucho tu post, ya tengo el doctrine instalado,ahora me hace falta aprender a usarlo jejejeje besos!!!!!
Publicar un comentario