2013-09-26 140 views
0

我有點困惑於Doctrine的文檔,所以也許你可以幫助我。我有以下類繼承:Doctrine2類表繼承

<?php 

class User 
{ 
    /** 
    * @var int 
    */ 
    private $_id; 

    /** 
    * @var Role 
    */ 
    private $_role; 
} 

class Company extends User 
{ 

} 

class Customer extends User 
{ 
    ... 
} 

class Role 
{ 
    /** 
    * @var int 
    */ 
    private $_id; 
} 

?> 

我想將每個類存儲在一個單獨的表中。該角色通過id定義用戶的類型。我將如何解決這個問題?我試過這個:

<?php 

/** 
* @Entity 
* @Table(name="user") 
* @InheritanceType("JOINED") 
* @DiscriminatorColumn(name="role_id", type="integer") 
* @DiscriminatorMap({"1" = "User", "2" = "Customer"}) 
*/ 
class User 
{ 
    ... 
} 

?> 

我不知道如何在這種情況下處理角色類。


謝謝你的回答。現在,我想這一點,得到了以下錯誤:

[Doctrine\DBAL\Schema\SchemaException] 
There is no column with name '_id' on table 'customer'. 

我有以下代碼:

<?php 

/** 
* Class Sb_User 
* 
* @Entity 
* @Table(name="user") 
* @InheritanceType("JOINED") 
* @DiscriminatorColumn(name="role_id", type="integer") 
* @DiscriminatorMap({"2" = "Sb_Customer", "8" = "Sb_Pos"}) 
*/ 
class Sb_User implements Sb_User_Interface 
{ 
    /** 
    * @Id 
    * @GeneratedValue 
    * @Column(name="id", type="integer") 
    * @var int 
    */ 
    protected $_id; 

    ... 
} 

/** 
* Class Sb_Customer 
* 
* @Entity 
* @EntityResult(discriminatorColumn="role_id") 
* @Table(name="customer") 
* 
*/ 
class Sb_Customer extends Sb_User implements Sb_Customer_Interface 
{ 
    .... 
} 

我不知道我做錯了。你可以幫我嗎?

?> 

回答

1

你的問題有點讓我困惑。

你想要使用連接表繼承來定義用戶的角色,但你也想添加一個角色屬性到你的用戶,據我所知,完全一樣。似乎你想用另一種方式兩次做同樣的事情。

無論如何,我會盡量給你一個答案。

如果你想使用獨立的表爲每種類型(客戶,公司等),你應該在映射超看看: http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#mapped-superclasses

這樣,你可以定義將要使用的基本類屬性和關係所有延伸它的實體。所有數據將保存在每個實體的單獨表格中。

如果要使用角色實體定義用戶的角色,則應該定義用戶和角色之間的多對一關係。

祝你好運!