Po połączeniu podmiotu, który ma powiązane podmioty z relacjami ustawionymi do kaskadowania zarówno operacji trwałych, jak i scalania, relacje są tracone!Doctrine 2.1 - Relacja utracona po ManyToMany Cascade Merge - Symfony2
Oto podmioty:
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;
}
Oto moje dołącza:
foreach ($events as $event)
{
if (!$event->hasParticipant($participant)) {
$event->addParticipant($participant);
}
if (!$participant->hasEvent($event)) {
$participant->addEvent($event);
}
}
Oto mój kod seryjnej:
echo "Before merge participant count: ".count($event->getParticipants()).PHP_EOL;
$event = $em->merge($event);
echo "After merge participant count: ".count($event->getParticipants()).PHP_EOL;
... i tu jest wyjście:
Before merge participant count: 2
After merge participant count: 0
..i baza danych wygląda następująco:
table | rows
-------------------------------
event | 1
-------------------------------
participant | 2
-------------------------------
event_participant | 0
-------------------------------
Czy ktoś może zobaczyć, gdzie mam być głupi?
BTW ma więcej związków niż to. Uprośniłem rzeczy tutaj, aby wyjaśnienie było jaśniejsze. Moje pozostałe relacje nie mają negatywnego wpływu na scalanie. Robię również scalanie w konsoli Polecenie nie w kontrolerze. Mogę pisać więcej kodu, jeśli to pomoże :)
Również używam Nauki 2.1.7 i 2.0.15 Symfony
Dziękujemy, Matthew
Dokumentacja ORM doktryny zaleca się stosowanie chronionych własności prywatnej zamiast jednej, w przypadku scalania. Myślę, że warto spróbować. Ponadto, dlaczego używasz scalania? – AdrienBrault