Um a problem I had with variations of entities den schmutzigen Weg zu umgehen, versuche ich die Anzahl der verfügbaren Farben für eine Geräte-Reparatur zu beschränken. Die verfügbaren Farben dürfen die für das Gerät verfügbaren Farben nicht überschreiten. SoSymfony/Doctrine: Zugriff auf die Join-Tabellen?
ich habe:
Device.php
Diese ordnet das Gerät an die Farben und die zur Verfügung stehenden Reparaturen für dieses Gerät.
/**
* @ORM\OneToMany(targetEntity="Repair", mappedBy="device", cascade={"remove"})
*/
private $repairs;
/**
* @ORM\ManyToMany(targetEntity="Color", inversedBy="devices")
* @ORM\JoinTable(name="devices_colors",
* joinColumns={@ORM\JoinColumn(name="device_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="color_id", referencedColumnName="id")}
* )
*/
private $colors;
Color.php
/**
* @ORM\ManyToMany(targetEntity="Device", mappedBy="colors")
*/
private $devices;
Repair.php
Dies bildet einen Reparaturauftrag zu einem Gerät, sondern auch auf eine Farbe.
/**
* @ORM\ManyToOne(targetEntity="Device", inversedBy="repairs")
* @ORM\JoinColumn(name="device_id", referencedColumnName="id")
*/
private $device;
/**
* @ORM\ManyToMany(targetEntity="Color")
* @ORM\JoinTable(name="repairs_colors",
* joinColumns={@ORM\JoinColumn(name="repair_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="color_id", referencedColumnName="id")}
* )
*/
private $colors;
RepairType.php
Punkt hier ist: dieses Feld Karte ‚Farben‘ auf die verfügbaren Farben in den Color
Entity aber diese Entscheidungen beschränken, was für diese Instanz von Device
verfügbar ist
Weil ich weiß, dass eine joins_colors Join-Tabelle erstellt wird, kann ich das gewünschte Ergebnis durch die folgende MySQL-Abfrage direkt erreichen y auf dem Server:
SELECT c.name FROM colors c LEFT JOIN devices_colors d ON (d.color_id=c.id) WHERE d.device_id = 1
Allerdings erreichen meine oben genannten Versuche in RepairType nicht die gleichen Ergebnisse. Ich bekomme immer alle die verfügbaren Farben, nicht nur diejenigen, die auf Device
gesetzt wurden. Was mache ich falsch?