/*
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