删除OneToMany元素,Doctrine2

时间:2015-05-31 20:19:38

标签: php doctrine-orm

我有这个型号; 行程,地点,行程地点。

我需要在行程和场地之间建立多对多的关系,但我也希望存储关于关系的一些特定数据(比如说明,自己的照片等),所以我决定引入一个名为ItineraryVenue的新实体。

所以行程中有ItineraryVenues的集合,反过来,它们指的是Venues。

我的问题是我无法从行程对象中删除ItineraryVenue。

$itinerary->itineraryVenues->removeElement($itineraryVenue);
$em->flush();

从php集合中删除元素,但不会从数据库中删除此$ itineraryVenue。

我已设法强制Doctrine2删除$ itineraryVenue,但仅当我使用Itinerary::$itineraryVenues注释orphanRemoval=true时。

由于孤儿删除将Venue视为私有财产,它也会删除Venue实体,我不希望这样。

是否存在关系配置选项或正在删除“手动”的方法以使其按我的方式工作?

很难相信,这是一种常见的关系模式。

实体定义:

class Itinerary
{
    /**
     * @ORM\OneToMany(targetEntity="ItineraryVenue", mappedBy="itinerary", cascade={"persist", "remove"})
     */
    private $itineraryVenues;

    function __construct()
    {
        $this->itineraryVenues = new ArrayCollection();
    }
}

class ItineraryVenue
{
    /**
     * @ORM\ManyToOne(targetEntity="Itinerary", inversedBy="itineraryVenues")
     */
    private $itinerary;
    /**
     * @ORM\ManyToOne(targetEntity="Venue")
     */
    private $venue;

    function __construct()
    {
    }
}

class Venue
{
}

0 个答案:

没有答案