1

我有一个显示实体的表格:

class Event
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * 
     * @ORM\OneToMany(targetEntity="EventAttendee", mappedBy="event", cascade={"all"})
     */
    private $attendees;
}

以及其中的一个集合:

class EventAttendee
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * 
     * @ORM\ManyToOne(targetEntity="Event", inversedBy="attendees")
     * @ORM\JoinColumn(name="event_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $event;

    /**
     * 
     * @ORM\OneToOne(targetEntity="Employee")
     * @ORM\JoinColumn(name="employee_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $employee;
}

如果我从集合中删除一个员工并再次添加它,我就会违反完整性约束。这是因为 Doctrine 的 UnitOfWork 先执行 Inserts 再执行 Deletes。因此,当它插入一条新记录时,数据库仍然有同一个员工的旧记录。

Doctrine2 开发人员没有为 Symfony2 用户提供任何可行的解决方案(这里是线程: http: //www.doctrine-project.org/jira/browse/DDC-601)。

因此,我在这里提出一个问题:是否有可能避免这个问题?

编辑:

我目前的解决方法是:

  1. 找到所有准备插入的非持久化集合项
  2. 从集合中删除它们并保存到变量
  3. 删除表单中真正删除的所有项目
  4. 调用flush()
  5. 将所有要插入的项目添加回集合
  6. 调用flush()

这对我有用,但看起来不太好。也许有人有更好的解决方案。

4

0 回答 0