Php Doctrine2类表继承

Php Doctrine2类表继承,php,orm,doctrine-orm,doctrine,Php,Orm,Doctrine Orm,Doctrine,我被条令的文件弄糊涂了,也许你能帮我。我有以下类继承: <?php class User { /** * @var int */ private $_id; /** * @var Role */ private $_role; } class Company extends User { } class Customer extends User { ... } class Role { /**

我被条令的文件弄糊涂了,也许你能帮我。我有以下类继承:

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

?>
我有以下代码:

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

你的问题让我有点困惑

您希望使用联接表继承来定义用户的角色,但也希望向用户添加一个角色属性,据我所知,该属性的作用与此完全相同。看起来你想用不同的方式做两次同样的事情

无论如何,我会尽力给你一个答案

如果要为每种类型(客户、公司等)使用单独的表,则应查看映射的超类:

通过这种方式,您可以定义扩展它的所有实体将使用的基本类属性和关系。所有数据将保存在每个实体的单独表格中

如果要使用角色实体定义用户的角色,应在用户和角色之间定义多对一关系

祝你好运

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