Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/01/2013, 01:06
yanker
 
Fecha de Ingreso: septiembre-2008
Mensajes: 31
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Imposible de montar doctrine2 + php

Tengo la siguiente estructura de carpetas.

index.php --> archivo en el raiz que conecta y prueba
lib/orm/ -->
--- doctrine.php --> donde he indicado que la conexión es cli-config.php
---cli.config
lib/orm/Entities --> Entidades
lib/orm/doctrine-orm --> aqui tengo los archivos de Doctrine2

el archivo cli-config.php es el siguiente: donde entrando por la URL y enviando el parametro Generar, me genera las clases. Pero no se si correctamente ya que no me pone el namspace. Creo que el fallo puede ser en este paso.

Código PHP:
<?php

use DoctrineORMToolsEntityGenerator;

//ini_set("display_errors", "On");
ini_set("display_errors""1");

// this is not necessary if you use Doctrine2 with PEAR
$libPath __DIR__ '/doctrine-orm/';

// autoloaders
require_once 'Doctrine/Common/ClassLoader.php';

// (1) Autocargamos clases
$classLoader = new DoctrineCommonClassLoader('Doctrine'$libPath); // custom path
$classLoader->register();
$classLoader = new DoctrineCommonClassLoader('Entities'__DIR__ '/Entities');
$classLoader->register();
$classLoader = new DoctrineCommonClassLoader('Proxies'__DIR__ '/Proxies');
$classLoader->register();

// (2) Configuración
$config = new DoctrineORMConfiguration();

// (3) Caché
$config->setMetadataCacheImpl(new DoctrineCommonCacheArrayCache);

// (4) Driver
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(__DIR__ '/Entities'));
$config->setProxyNamespace('Proxies');

// (5) Proxies
$config->setProxyDir(__DIR__ '/Proxies');
$config->setProxyNamespace('Proxies');

// (6) Conexión
$connectionParams = array(
    
'dbname' => 'pruebas',
    
'user' => 'DESAS',
    
'password' => 'ebixa',
    
'host' => 'localhost',
    
'driver' => 'pdo_sqlsrv',
);

// (7) EntityManager
$em DoctrineORMEntityManager::create($connectionParams$config);

// (8) Código de prueba
//$user = new EntitiesUser();
//$address = new EntitiesAddress();

echo 'Hola mundo!' PHP_EOL;

if (isset(
$_GET["generar"])) {
    
//echo __DIR__ . '../model/entities';
// custom datatypes (not mapped for reverse engineering)
    
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('set''string');
    
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('enum''string');

// fetch metadata
    
$driver = new DoctrineORMMappingDriverDatabaseDriver(
                    
$em->getConnection()->getSchemaManager()
    );

    
$em->getConfiguration()->setMetadataDriverImpl($driver);
    
$cmf = new DoctrineORMToolsDisconnectedClassMetadataFactory();
    
$cmf->setEntityManager($em); // we must set the EntityManager

    
$classes $driver->getAllClassNames();
    
$metadata = array();
    foreach (
$classes as $class) {
        
//any unsupported table/schema could be handled here to exclude some classes
        
if (true) {
            
$metadata[] = $cmf->getMetadataFor($class);
        }
    }

    
$generator = new EntityGenerator();
    
$generator->setUpdateEntityIfExists(true); // only update if class already exists
    //$generator->setRegenerateEntityIfExists(true); // this will overwrite the existing classes
    
$generator->setGenerateStubMethods(false);
    
$generator->setGenerateAnnotations(true);
    
$generator->generate($metadata__DIR__ '/Entities');

    print 
'Done!';
}
?>
Ya finalmente intento hacer este código, para poder hacer una consulta como hacia con dictrine1, primero incluyo el codigo de cli_config.php para que me decuelva el $em.

Código PHP:
require_once 'lib/orm/cli-config3.php';
//$em = EntityManagerFactory::createEntityManager();

$huesped = new Huesped();
$huesped->setDocumento("1111111");
$huesped->setNombres("Juan");
$huesped->setApellidos("Perez");
$huesped->setTelefono("555555");

//$fecha = new DateTime();
//$huesped->setFechaNacimiento($fecha->createFromFormat("d/m/Y", "28/10/1986"));

//persistimos el objeto utilizando el método persist que proporciona el EntityManager
//, para un manejo correcto de errores, debemos utilizar un bloque try catch:
$em->persist($huesped);

//sincronizamos los datos entre la base de datos y el EntityManager.
$em->flush();

//una vez persistido el objeto huesped y sincronizados los datos, podemos conocer 
//el id que se asignó a dicho objeto, con tan solo hacer un llamado al método getId() 
//del objeto huesped.
try {
    
$em->persist($huesped);
    echo 
'Se persisti&oacute; el huesped ' $huesped->getNombres() . ' ' $huesped->getApellidos() . ' con ID ' $huesped->getId();

    echo 
'<strong>La tabla huesped contiene los siguientes datos</strong>';
    
$query $em->createQuery("SELECT h FROM entities\Huesped h");

    
print_r($query->getResult());
} catch (
Exception $exc) {
    echo 
$exc->getMessage();

Espero que me puedan ayudar