ein Unternehmen A
gegeben, die mit Einheiten B
und C
durch die optional ManyToOne Beziehungen verbunden ist - was der beste Weg, um sicherzustellen, dass sein würde, dass nur eine dieser Beziehungen auf einem verwendet wird, Zeit (XOR)?Lehre XOR zwei Beziehungen auf einer Entität
Was ich versuche das folgende Bild veranschaulicht recht gut zu erreichen ist (Mächtigkeit dort anders angezeigt):
Natürlich kann ich sicherstellen, dass Referenzen unter einem Repository gültig sind Code oder anderswo, aber vielleicht gibt es eine "richtige" Möglichkeit, dies zu tun, indem Sie Doctrine Mapping-Funktionen verwenden?
A
/**
* @ORM\Table(name="A")
* @ORM\Entity(repositoryClass="Test\AppBundle\Repository\ARepository")
*/
class A
{
/**
* @var
* @ORM\ManyToOne(targetEntity="B", inversedBy="as", cascade={"all"})
*/
private $b = null;
/**
* @var null
* @ORM\ManyToOne(targetEntity="C", inversedBy="as", cascade={"all"}))
*/
private $c = null;
}
B
/**
* @ORM\Table(name="B")
* @ORM\Entity(repositoryClass="Test\AppBundle\Repository\BRepository")
*/
class B
{
/**
* @var
* @ORM\OneToMany(targetEntity="A", mappedBy="b", cascade={"all"})
*/
private $as = null;
}
C
/**
* @ORM\Table(name="C")
* @ORM\Entity(repositoryClass="Test\AppBundle\Repository\CRepository")
*/
class C
{
/**
* @var
* @ORM\OneToMany(targetEntity="A", mappedBy="c", cascade={"all"})
*/
private $as = null;
}
Danke, ich denke, ich werde mit den Lebenszyklus-Callbacks gehen, da der Setter-basierte Ansatz viel fehleranfälliger ist (wie die eine Sache, dann die andere - und frage mich, warum es mit der falschen Eins endet) –