В Doctrine2, когда у вас есть родительский класс сущности, Person
устанавливается как:
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee", , "client" = "Client"})
*/
class Person
{
// ...
}
, а подклассы, такие как Client
, устанавливаются как:
/** @Entity */
class Client extends Person
{
// ...
}
, когдавы создаете Person
как:
$person = new Person();
Doctrine2 проверяет ваш оператор @DiscriminatorMap
(см. выше) на предмет соответствующего сопоставления с Person
и, когда он найден, создает строковое значение в столбце таблицы, установленном в @DiscriminatorColumn
выше.
Поэтому, когда вы решите иметь экземпляр Client
в виде:
$client = new Client();
Следуя этим принципам, Doctrine2 будет создавать для вас экземпляр, если вы объявилипараметры в @DiscriminatorMap
.Также будет сделана запись в таблице Person
в столбце discr , чтобы отразить тот тип класса сущности, который только что был создан.
Надеюсь, что это поможет.Это все в документации хотя