我有这个型号; 行程,地点,行程地点。
我需要在行程和场地之间建立多对多的关系,但我也希望存储关于关系的一些特定数据(比如说明,自己的照片等),所以我决定引入一个名为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
{
}