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