2011-05-10 157 views
5

我對Symfony 2.0和學說非常陌生。我有不同的捆綁狀態和客戶實體。我只想增加國家和客戶之間的關係。我是代碼狀態和​​客戶實體。下面是我的代碼:Symfony 2:學說不能創建關係

/** 
* @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; 
} 

而且我的配置文件:

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

所以我的問題是,當我使用產生php app/console doctrine:schema:create命令表生成模式。但是關係不會生成/狀態列不會在客戶表/中生成。爲什麼?我沒有任何想法?我會很高興爲每個建議和帖子。

回答

9

如果您密切關注Doctrine2文檔中的示例,則可能會遇到該問題,因爲Symfony2會將所有Doctrine2註釋放入orm命名空間中,而您似乎在OneToOne和JoinColumn註釋中缺少這些註釋。您爲$國有財產的代碼應該是這樣的:

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

編輯:隨着Symfony2的β2引入了變化,說明已經改變了一點。註釋在使用之前需要導入;進口主義看起來是這樣的:

use Doctrine\ORM\Mapping as ORM; 

然後新的使用看起來像這樣:

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

有進一步的更改註釋系統some discussion;如果這些更改推出,我會再次進行編輯。

+0

謝謝你的回覆。根據您的指示,我將所有'@orm'註釋更改爲'orm'。然後運行'code'php app/console doctrine:schema:create'code'命令並獲取'code'沒有元數據類來處理。'code'消息。表格不會生成。任何想法? – Zeck 2011-05-10 14:18:32

+0

你可以用你的新實體更新你的問題嗎(即用現在的樣子替換現有的例子)? – Problematic 2011-05-10 14:21:10

+0

很酷謝謝你。你節省了我的一天。 – Zeck 2011-05-10 14:30:06