Doctrine 2.1 - 在ManyToMany级联合并之后失去了关系 - Symfony2

mat*_*hew 5 merge many-to-many cascade symfony doctrine-orm

合并一个具有相关实体的实体与关系设置为级联的持久化和合并操作后,关系就会丢失!

以下是实体:

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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的加入:

foreach ($events as $event)
{
    if (!$event->hasParticipant($participant)) {

        $event->addParticipant($participant);
    }
    if (!$participant->hasEvent($event)) {

        $participant->addEvent($event);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的合并代码:

echo "Before merge participant count: ".count($event->getParticipants()).PHP_EOL;

$event = $em->merge($event);

echo "After merge participant count: ".count($event->getParticipants()).PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

......这是输出:

Before merge participant count: 2
After merge participant count: 0
Run Code Online (Sandbox Code Playgroud)

..和数据库看起来像这样:

table               | rows
-------------------------------
event               | 1
-------------------------------
participant         | 2
-------------------------------
event_participant   | 0
-------------------------------
Run Code Online (Sandbox Code Playgroud)

谁能看到我愚蠢的地方?

顺便说一句,有更多的关系.我在这里简化了一些事情,使解释更加清晰.我的其他关系不会受到合并的负面影响.此外,我正在控制台中执行合并命令而不是控制器中的合并.我可以发布更多代码,如果它会帮助:)

我也在使用Doctrine 2.1.7和Symfony 2.0.15

非常感谢,马修