Подскажите, как правильно в ORM (например, в Doctrine 2) организовать связь один ко многим в Агрегате (Aggregate) между сущностями.
Возьмем пример: есть Правило (
Rule) и Нарушение (
Violation).
Очевидно, что Нарушения без Правила быть не может. Rule - это Aggregate Root, т.е. доступаться к Violation мы будем только через Rule.
Вопрос, как правильно тут сделать отношения?
Варианты:
- 1:M Bidirectional, где внешний ключ `rule_id` будет в таблице `violations`.
- 1:M Unidirectional через таблицу связку, но в таком случае будут три таблицы: `rules`, `violations`, `rule_violations`.
И, самое главное, как будет выглядеть сущность Violation - будем ли мы в конструктор передавать `$ruleId`, или Violation ничего о Rule знать не будет?
Первый вариант
class Violation
{
public function __construct(ViolationId $vid, RuleId $rid, /* other parameters /*)
}
Второй
class Violation
{
public function __construct(ViolationId $vid, /* other parameters /*)
}
Если это правильно хранить ruleId в сущности Violation, то как тогда сделать маппинг в ORM, ведь Doctrine работает с объектами отношениями, а не с простыми integer.
Спасибо