2015-05-22 157 views
1

我的目標是繼承已經繼承的表與教條。我有一個抽象的用戶類...Symfony2繼承自繼承的表

<?php 
namespace UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use FOS\UserBundle\Model\User as BaseUser; 

/** 
* @ORM\Entity 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="type", type="string") 
* @ORM\DiscriminatorMap({"student" = "Student", "employee" = "Employee", "customer" = "Customer"}) 
*/ 
abstract class User extends BaseUser 
{ 
} 

...和各種小類(學生,客戶,僱員)。像這樣:

<?php 
namespace UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* UserBundle\Entity\Student 
* 
* @ORM\Entity 
*/ 
class Student extends User 
{ 
} 

在這個設置中,一切都正常工作。現在,其他軟件包(被視爲單獨的模塊)應該添加來自子類的列。因此,我喜歡像學生一樣繼承這些類。但這些不能是抽象的,因爲它們被核心系統使用。

有沒有可能解決這與教條類表繼承?如果不是,您會推薦哪種解決方案?

回答

2

不幸的是,在教條中不可能有多於一個的繼承層次。

您可能想重新考慮您的設計,因爲對繼承的強烈需求可能是一個令人不安的消息的跡象。

讓我們的學生,例如: 通過declearing這樣的說法:

class Student extends User 

你含蓄地說,所有我的學生也是用戶。這聽起來很正確,但考慮用戶女巫既是學生又是老師(如大學助理)。

也許可能有某種用戶分析將您的用戶與另一個實體相關聯。某些用戶可能確實缺乏這種關係,如在系統機器人的情況下。 在這種情況下,您的包/模塊可以聲明一個實體並與用戶(充當橋樑)的關係進一步限定您的用戶。

我不想拆除你的實際結構,如果你更好地解釋你的需要,我可以提供一些見解。

希望它對你有意義, 關心。

+1

Thx爲答案@ francesco-panina。在我的szenario中,用戶確實無法成爲(學生和員工)和_系統殭屍工具_我使用API​​密鑰接口......這些接口與任何用戶(除關聯所有者之外)都是獨立的。 我對最終論文的最終解決方法是:根據當前模塊動態添加disciminator,並將特定模塊用戶與使用的子文件合併。它的工作原理......醜陋......地獄...... – binzram

+0

坦白說,大部分時間我都接觸現實,我選擇的實施方式是最具成本效益的,這遠離乾淨優雅的...如果它適合你,只要它是一個明智的選擇,選擇任何解決方案並不是件可恥的事。祝你好運! –