Я немного смущен документацией Doctrine, поэтому, возможно, вы можете мне помочь. У меня есть следующее классовое наследование:Doctrine2 Наследование классов классов
<?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
/**
* @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
{
....
}
Я не знаю, что я делаю неправильно. Вы можете мне помочь?
?>