Después de fusionar una entidad que tiene entidades relacionadas con relaciones establecidas en cascada, tanto las operaciones de persistencia como las de combinación se pierden.Doctrine 2.1 - Relación perdida después de la fusión en cascada de ManyToMany - Symfony2
Estas son las entidades:
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;
}
Aquí están mis une:
foreach ($events as $event)
{
if (!$event->hasParticipant($participant)) {
$event->addParticipant($participant);
}
if (!$participant->hasEvent($event)) {
$participant->addEvent($event);
}
}
Aquí está mi código de fusión:
echo "Before merge participant count: ".count($event->getParticipants()).PHP_EOL;
$event = $em->merge($event);
echo "After merge participant count: ".count($event->getParticipants()).PHP_EOL;
... y aquí está la salida:
Before merge participant count: 2
After merge participant count: 0
..y la base de datos es el siguiente:
table | rows
-------------------------------
event | 1
-------------------------------
participant | 2
-------------------------------
event_participant | 0
-------------------------------
¿Alguien puede ver donde estoy siendo tonta?
BTW hay más relaciones que esta. He simplificado las cosas aquí para aclarar la explicación. Mis otras relaciones no se ven negativamente afectadas por la fusión. También estoy haciendo la fusión en una consola Command no en un controlador. Me pueden enviar más de código si que va a ayudar :)
También estoy usando Doctrina 2.1.7 y 2.0.15 Symfony
Muchas gracias, Mateo
La documentación ORM doctrina recomiendan utilizar los bienes protegidos en lugar de una privada, en un caso de fusión. Creo que vale la pena intentarlo. Además, ¿por qué estás usando fusionar? – AdrienBrault