De nuvo mil gracias masterpuppet por estar ayudandome. Creo que va en buen camino. He hecho prueba como dices, y almenos encontrar la clase la encuentra ya,porque he editado los nombres de las clases y/o entidades y daba el error de not found.
Bien, te comento lo que he hecho y que me pasa ahora, que pienso que puede ser lo último. Mediante el script del principio del post, he generado las clases a partir de una base de datos ya creada, es sqlserver, ya que lo que estoy intentnado hacer es pasar una aplicacion de .net a php + doctrine.
Una vez generada estas clases, me ha generado la clase Huesped.php en la estructura de directorios que comenté al principio. No agrega el namespace y se lo pongo manualmente como comentas.
Código PHP:
<?php
namespace Entities;
use DoctrineORMMapping as ORM;
/**
* Huesped
*
* @ORM\Table(name="Huesped")
* @ORM\Entity
*/
class Huesped
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="documento", type="string", length=10, nullable=false)
*/
private $documento;
/**
* @var string
*
* @ORM\Column(name="nombres", type="string", length=50, nullable=false)
*/
private $nombres;
/**
* @var string
*
* @ORM\Column(name="apellidos", type="string", length=50, nullable=false)
*/
private $apellidos;
/**
* @var string
*
* @ORM\Column(name="telefono", type="string", length=10, nullable=false)
*/
private $telefono;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set documento
*
* @param string $documento
* @return Huesped
*/
public function setDocumento($documento)
{
$this->documento = $documento;
return $this;
}
/**
* Get documento
*
* @return string
*/
public function getDocumento()
{
return $this->documento;
}
/**
* Set nombres
*
* @param string $nombres
* @return Huesped
*/
public function setNombres($nombres)
{
$this->nombres = $nombres;
return $this;
}
/**
* Get nombres
*
* @return string
*/
public function getNombres()
{
return $this->nombres;
}
/**
* Set apellidos
*
* @param string $apellidos
* @return Huesped
*/
public function setApellidos($apellidos)
{
$this->apellidos = $apellidos;
return $this;
}
/**
* Get apellidos
*
* @return string
*/
public function getApellidos()
{
return $this->apellidos;
}
/**
* Set telefono
*
* @param string $telefono
* @return Huesped
*/
public function setTelefono($telefono)
{
$this->telefono = $telefono;
return $this;
}
/**
* Get telefono
*
* @return string
*/
public function getTelefono()
{
return $this->telefono;
}
}
Por otro lado tengo un fichero con una función que me devuelve un entitymanager para operar con él.
Código PHP:
<?php
require_once __DIR__ . '/doctrine-orm/Doctrine/Common/ClassLoader.php';
use DoctrineCommonClassLoader,
DoctrineORMConfiguration,
DoctrineORMEntityManager,
DoctrineCommonCacheApcCache;
/**
* Description of EntityManagerFactory
* @author Juan Carlos Perez Zapata
* @version 0.1
*/
class EntityManagerFactory {
/**
* @var Doctrine\ORM\EntityManager
*/
private static $em;
/**
*
* @return Doctrine\ORM\EntityManager
*/
public static function createEntityManager() {
if (self::$em == null) {
//Paso 1: Cargamos las clases del namespace Doctrine
$classLoader = new DoctrineCommonClassLoader('Doctrine', __DIR__ . '/doctrine-orm');
$classLoader->register();
// Paso 2: Cargamos las entidades
$entitiesClassLoader = new ClassLoader('Entities', realpath("lib/model"));
$entitiesClassLoader->register();
//Paso 3: Cargamos las clases que sirven de proxies
$proxiesClassLoader = new ClassLoader('proxies', realpath("lib/model"));
$proxiesClassLoader->register();
//Paso 4: Configuracion de la caché
$config = new Configuration();
$config->setMetadataCacheImpl(new DoctrineCommonCacheArrayCache());
//Paso 5: Configuracion de los metadatos de la entidades
$driverImpl = $config->newDefaultAnnotationDriver(array(__DIR__ . "/../model/entities"));
$config->setMetadataDriverImpl($driverImpl);
//Paso 6: Configuracion clases proxies
$config->setProxyDir(__DIR__ . '/../model/proxies');
$config->setProxyNamespace('proxies');
//Paso 7: Configuración de los datos de conexión
$connectionOptions = array(
'driver' => 'pdo_sqlsrv',
'host' => 'localhost',
'dbname' => 'pruebas',
'user' => 'DES',
'password' => 'ebixa'
);
//Pase 8: Creacion EntityManager
self::$em = EntityManager::create($connectionOptions, $config);
}
return self::$em;
}
}
Ya por último para hacer las prueba de que todo esto funciona intento guardar un dato en la base de datos, y luego listar estos con este fichero.
Código PHP:
<?php
//Paso 1: Obtenemos una referencia del EntityManager
include_once "lib/orm/EntityManagerFactory.php";
$em = EntityManagerFactory::createEntityManager();
//Paso 2: Creamos un objeto Huesped y le seteamos algunos valores para sus propiedades
$huesped = new EntitiesHuesped();
$huesped->setDocumento("1111111");
$huesped->setNombres("Juan");
$huesped->setApellidos("Perez");
$huesped->setTelefono("555555");
try {
//Paso 3: Persistimos el objeto Huesped
$em->persist($huesped);
//Paso 4: Sincronizamos los datos entre la bd y el EntityManager
$em->flush();
//Paso 5: Obtenemos el Id asignado al objeto que acabamos de persistir
echo 'Se persistió el huesped ' . $huesped->getNombres() . ' ' . $huesped->getApellidos() . ' con ID ' . $huesped->getId();
//Paso 6: Consultamos todos los objetos Huesped persistidos hasta ahora
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();
}
?>
Y ahora el error que me da es el siguiente:
Class "Entities\Huesped" is not a valid entity or mapped super class.
Espero que me podais ayudar,gracias.