Доброго времени суток!
Начал знакомиться с Symfony. В процессе возникли некоторые вопросы, связанные с сущностями.
В базе есть таблицы:
Users (
id, login, password, ...);
Salers (id, user_id, ...,
FOREIGN KEY(user_id) REFERENCES Users(id));
Managers (id, user_id, ...,
FOREIGN KEY(user_id) REFERENCES Users(id));
Customers (id, user_id, ...,
FOREIGN KEY(user_id) REFERENCES Users(id));
Т.е. таблица "Users" содержит общие поля для всех пользователей. В зависимости от типа создается запись в связной таблице, где хранятся индивидуальные для каждого типа пользователей атрибуты.
В доке по ORM и в нагугленных статьях связи как-то однобоко рассмотрены (из тех, что я нашел, конечно же).
Везде рассматриваются связи между разными сущностями. И при использовании такого подхода классы сущностей будут выглядеть так (аннотации связей на память не помню, простите(( ):
class User
{
protected $id;
protected $login;
protected $password;
// и т.д....
}
class Saler
{
protected $id;
/**
* @OneToOne(targetEntity="User", ...)
*/
protected $user;
// и т.д....
}
Managers и Customers по аналогии.
С User всё предельно понятно. С остальными - не очень как-то.
Как указывать связи в таком случае? И OneToOne ли это?
При такой связи доступ к общим полям будет осуществляться через конструкцию типа
$saler->user->getLogin();
Верно ли я понял? Если да, то...
Можно ли организовать доступ к полям сущностей так, как это было бы при наследовании, при этом храня общие поля в таблице Users (как это сейчас в базе и есть)?
class Saler extends User{...}
// $saler instanceof Saler;
$saler->getLogin(); // User-method
Пробовал классы сущностей вручную дополнить "... extends User", в базе получалось так, что все таблицы создавались полностью с родительскими полями. Это не совсем то, что хотелось бы.