我的目标是使用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类表继承来解决这个问题?如果没有,你会推荐哪种解决方案?
答案 0 :(得分:2)
可悲的是,在学说中不可能有多个级别的继承。
你可能想重新考虑你的设计,因为这种强烈的继承需求可能是令人不安的新闻的标志。
我们以学生为例: 通过删除此声明:
class Student extends User
你含蓄地说我的所有学生也是用户。这可能听起来不错,但考虑到用户女巫的情景既是学生又是教师(如大学助理)。
也许可能会有某种用户分析将您的用户与另一个实体联系起来。有些用户可能确实缺乏这种关系,就像系统 bots 一样。 在这种情况下,您的捆绑/模块可以声明实体以及与用户(充当桥梁)的关系,这可能会进一步限定您的用户。
我不想拆除你的实际结构,如果你能更好地解释你的需求,我可以提供一些见解。
希望你有意义, 问候。