Dopo la fusione di un'entità che ha entità correlate con relazioni impostate in cascata entrambe le operazioni persistono e uniscono le relazioni vengono perse!Doctrine 2.1 - Relazione persa dopo ManyMany Cascade Merge - Symfony2
Qui ci sono le entità:
class Event implements NormalizableInterface
{
/**
* @ORM\ManyToMany(targetEntity="Participant", inversedBy="events", cascade={"persist", "merge"})
* @ORM\JoinTable(name="event_participant",
* joinColumns={@ORM\JoinColumn(name="event_id", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="participant_id", referencedColumnName="id", onDelete="CASCADE")}
* )
*/
private $participants;
}
class Participant implements NormalizableInterface
{
/**
* @ORM\ManyToMany(targetEntity="Event", mappedBy="participants", cascade={"persist", "merge"})
*/
protected $events;
}
Ecco le mie unisce:
foreach ($events as $event)
{
if (!$event->hasParticipant($participant)) {
$event->addParticipant($participant);
}
if (!$participant->hasEvent($event)) {
$participant->addEvent($event);
}
}
Ecco il mio codice di unione:
echo "Before merge participant count: ".count($event->getParticipants()).PHP_EOL;
$event = $em->merge($event);
echo "After merge participant count: ".count($event->getParticipants()).PHP_EOL;
... e qui è l'output:
Before merge participant count: 2
After merge participant count: 0
..e il database appare così:
table | rows
-------------------------------
event | 1
-------------------------------
participant | 2
-------------------------------
event_participant | 0
-------------------------------
Chiunque può vedere dove mi sto comportando muto?
BTW ci sono più relazioni di questo. Ho semplificato le cose qui per rendere più chiara la spiegazione. Le mie altre relazioni non sono influenzate negativamente dall'unione. Inoltre sto facendo l'unione in una console Comando non in un controller. Posso postare più di codice, se ti aiuto :)
Anche io sto usando Dottrina 2.1.7 e 2.0.15 Symfony
Molte grazie, Matthew
La documentazione ORM dottrina consiglia di utilizzare le proprietà invece di una privata protetta, in un caso di fusione. Penso che valga la pena provare. Inoltre, perché stai utilizzando l'unione? – AdrienBrault