我对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
{
....
}
我不知道我做错了什么。你能救我吗?
?>
答案 0 :(得分:1)
你的问题对我来说有点混乱。
您希望使用联接表继承来定义用户的角色,但您还希望向用户添加角色属性,据我所知,该属性完全相同。好像你试图以不同的方式做同样的事情两次。
无论如何,我会尽力给你答案。
如果要为每种类型(客户,公司等)使用单独的表,您应该查看映射的超类: http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#mapped-superclasses
通过这种方式,您可以定义将扩展它的所有实体将使用的基本类属性和关系。所有数据都将保存在每个实体的单独表中。
如果要使用Role实体定义用户的角色,您应该在用户和角色之间定义多对一关系。
祝你好运!