Зачем вам interger? Зачем вам в конструктор передовать ID? Это DDD, вы работаете с объектами и их поведением, а не со свойствами объектов.
То есть
<?php
class Violation
{
private $id;
private $rules;
public function __construct(ViolationID $vid, array $rules = []) {
$this->id = $vid;
$rules = $rules;
}
public function addRule(Rule $rule) {
$this->rules[] = $rule;
return $this;
}
public function deleteRule(Rule $rile)...
public function getRules()...
...
}
class Rule
{
private $id;
private $violation;
public function __construct(RuleID $rid, Violation $violation) {
$this->id = $rid;
$this->violation = $violation;
}
...
}
Проблем с маппингом никаких быть не должно, приведу пример в yaml и рекомендую при использовании DDD и доктрины использовать external mapping.
Core\Violation:
type: entity
table: violation
repositoryClass: InfrastructureBundle\Repository\PersistViolationRepository
oneToMany:
rules:
cascade: [ "persist", "remove" ]
targetEntity: Core\Rule
mappedBy: violation
orphanRemoval: true
Core\Rule:
type: entity
table: rule
repositoryClass: InfrastructureBundle\Repository\PersistRuleRepository
manyToOne:
violation:
targetEntity: Core\Violation
inversedBy: rules
joinColumn:
name: violation_id
referencedColumnName: id
UPD: Я плясал от того что одно нарушение содержит в себе несколько правил. Как я понял у вас наоборот, но сути это не меняет.