Я использую Doctrine PHP ORM 2.0 .
Я хотел бы реализовать следующую иерархию классов.(Обратите внимание, что следующий фрагмент кода не будет выполнен, так как он не является ни синтаксически правильным PHP, ни правильным использованием аннотаций Doctrine.)
@MappedSuperclass
abstract class Location {}
@Entity
class GeoId {
@Column(type = "float") $latitude;
@Column(type = "float") $longitude;
// this is the part that my question concerns
@???
$location; // any subclass of location can go here
}
Теперь для подклассов Location мы можем взять City
, State
и Country
, например.Или Adress
, если мы хотим быть очень конкретными.Для получения дополнительной информации об этой иерархии классов:
class Adress { $parent; /* of type City, ... some other attributes */ }
class City { $parent; /* of type State */ }
class State { $parent; /* of type Country */ }
class Country {}
(Приведенная выше иерархия заставит мой ответ склониться к решению «Таблица на класс».)
Вопросы:
- Возможно ли иметь полиморфный атрибут в сущности, и если да, то как его реализовать?
- Какую стратегию наследования я могу реализовать в иерархии классов Location (как показано ниже),и какие стратегии являются предпочтительными (например, наследование MappedSuperclass, Single-Table или Class-Table)?