2011-05-10 10 views
5

Soy muy nuevo en Symfony 2.0 y Doctrine. Tengo entidad de estado y cliente en paquete diferente. Solo quiero agregar una relación entre el estado y el cliente. Soy entidades estatales y de clientes codificadas. Aquí está el código de mi:Symfony 2: Doctrine no puede crear una relación

/** 
* @orm:Entity 
*/ 
class Customer 
{ 
    /** 
    * @orm:Id 
    * @orm:Column(type="integer") 
    * @orm:GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @OneToOne(targetEntity="State") 
    * @JoinColumn(name="state_id", referencedColumnName="id") 
    */ 
    protected $state; 

} 

/** 
* @orm:Entity 
*/ 
class State 
{ 
    /** 
    * @orm:Id 
    * @orm:Column(type="integer") 
    * @orm:GeneratedValue(strategy="IDENTITY") 
    */ 
    protected $id; 

    /** 
    * @orm:Column(type="string", length="50") 
    */ 
    protected $name; 
} 

Y mi fichero de configuración:

doctrine: 
    dbal: 
     driver: %database_driver% 
     host:  %database_host% 
     dbname: %database_name% 
     user:  %database_user% 
     password: %database_password% 

    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     mappings: 
      FogCustomerBundle: { type: annotation, dir: Entity/ } 
      FogMainBundle: { type: annotation, dir: Entity/ } 

Así que mi problema es cuando genero esquema por medio de tablas se generan php app/console doctrine:schema:create comando. Pero la relación no genera/la columna de estado no se genera en la tabla de clientes /. ¿Por qué? No tengo ni idea? Me alegraré por cada consejo y publicación.

Respuesta

9

Puede encontrarse con ese problema si sigue de cerca los ejemplos de la documentación de Doctrine2, porque Symfony2 coloca todas las anotaciones de Doctrine2 en el espacio de nombre orm, que parece que falta en sus anotaciones de OneToOne y JoinColumn. Su código de la propiedad estatal de $ debe tener este aspecto:

/** 
* @orm:OneToOne(targetEntity="State") 
* @orm:JoinColumn(name="state_id", referencedColumnName="id") 
*/ 
protected $state; 

EDIT: Con los cambios introducidos en Symfony2 beta2, anotaciones han cambiado un poco. Las anotaciones deben importarse antes de ser utilizadas; Doctrina importación se ve así:

use Doctrine\ORM\Mapping as ORM; 

A continuación, el nuevo uso se ve así:

/** 
* @ORM\OneToOne(targetEntity="State") 
* @ORM\JoinColumn(name="state_id", referencedColumnName="id") 
*/ 
protected $state; 

Hay some discussion de más cambios en el sistema de anotación; si estos cambios se implementan, regresaré con otra edición.

+0

Gracias por su respuesta. De acuerdo con sus instrucciones, he cambiado todas las anotaciones '@orm' a 'orm'. A continuación, ejecute la aplicación 'code'php app/console doctrine: schema: create'code' y obtenga 'code'No Classes de metadatos para procesar el mensaje' code '. Las tablas no se generan. ¿Alguna idea? – Zeck

+0

¿Puede actualizar su pregunta con sus nuevas entidades (es decir, reemplace el ejemplo existente con el aspecto que tiene ahora)? – Problematic

+0

Cool gracias. Me salvaste el día. – Zeck

Cuestiones relacionadas