Symfony2继承自继承的表

时间:2015-05-22 09:05:52

标签: symfony inheritance doctrine-orm

我的目标是使用doctrine继承已经继承的表。我有一个抽象的用户类......

<?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
{
}

在此设置中,一切正常。现在,其他捆绑包(作为单独的模块)应该从子类中添加列。因此,我喜欢像学生一样继承这些课程。但那些不是抽象的,因为它们被核心系统使用。

是否可以使用doctrine类表继承来解决这个问题?如果没有,你会推荐哪种解决方案?

1 个答案:

答案 0 :(得分:2)

可悲的是,在学说中不可能有多个级别的继承。

你可能想重新考虑你的设计,因为这种强烈的继承需求可能是令人不安的新闻的标志。

我们以学生为例: 通过删除此声明:

class Student extends User

你含蓄地说我的所有学生也是用户。这可能听起来不错,但考虑到用户女巫的情景既是学生又是教师(如大学助理)。

也许可能会有某种用户分析将您的用户与另一个实体联系起来。有些用户可能确实缺乏这种关系,就像系统 bots 一样。 在这种情况下,您的捆绑/模块可以声明实体以及与用户(充当桥梁)的关系,这可能会进一步限定您的用户。

我不想拆除你的实际结构,如果你能更好地解释你的需求,我可以提供一些见解。

希望你有意义, 问候。