0

我对 Doctrine 的文档有点困惑,所以也许你可以帮助我。我有以下类继承:

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

?>

我想将每个类存储在一个单独的表中。角色通过 id 定义用户的类型。我将如何解决这个问题?我试过这个:

<?php

/**
 * @Entity
 * @Table(name="user")
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="role_id", type="integer")
 * @DiscriminatorMap({"1" = "User", "2" = "Customer"})
 */
class User
{
    ...
}

?>

我不确定在这种情况下如何处理角色类。


谢谢您的回答。现在我尝试了这个并得到以下错误:

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

我不知道我做错了什么。你能帮助我吗?

?>
4

1 回答 1

1

你的问题让我有点困惑。

您想使用连接表继承来定义用户的角色,但您还想为您的用户添加一个角色属性,据我所知,它的作用完全相同。似乎您正试图以不同的方式两次做同样的事情。

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

如果您想为每种类型(客户、公司等)使用单独的表,您应该查看映射的超类: http: //docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping。 html#mapped-superclasses

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

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

祝你好运!

于 2013-09-27T10:14:43.017 回答