2015-05-22 116 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

坦白说,大部分时间我都接触现实,我选择的实施方式是最具成本效益的,这远离干净优雅的...如果它适合你,只要它是一个明智的选择,选择任何解决方案并不是件可耻的事。祝你好运! –