我想限制对象的删除操作,但它不起作用。
我的第一个实体的代码:
/**
* @ORM\ManyToMany(targetEntity="Season", inversedBy="clubs")
* @ORM\JoinTable(
* name="clubs_to_seasons",
* joinColumns={
* @ORM\JoinColumn(name="club_id", referencedColumnName="id", onDelete="cascade")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="season_id", referencedColumnName="id", onDelete="restrict")
* }
* )
**/
private $seasons;
第二名:
/**
* @ORM\ManyToOne(targetEntity="League")
* @Assert\NotBlank(message="validation.custom.not_blank")
*/
private $league;
在数据库方面一切都很好 - 我无法删除Season对象,因为它有对Club对象的引用,但是当我使用Entity Manager中的remove功能时,Season对象被删除。
我知道ORM方面是cascade={..}
,但我需要限制,而不是级联。
BUMP:
如果我使用的是一对多,多对一或一对一,一切都很好 - 当我尝试删除一个对象时(我正在使用onDelete="restrict"
数据库方面),然后异常出现消息,我无法删除,因为我有其他对象连接。但是当我有多对多(如我的例子),并且我有一个与任何俱乐部相关的赛季(并且我有onDelete =“restrict”)时,我仍然可以使用实体经理删除赛季。但是当我在数据库端直接删除季节时,会出现消息,我无法删除它。
多对多有什么问题?
编辑: 好的,现在它正在工作。
我对未来的解决方案: 我从两个实体中删除了多对多关系。我已经成为第三个实体 - clubToSeason。以前这个实体是自动生成的,现在不是。在第三个实体的内部文件中,我有两个多对一的关系:
class ClubToSeason {
/**
* @ORM\ManyToOne(targetEntity="season", inversedBy="clubs")
**/
private $season;
/**
* @ORM\ManyToOne(targetEntity="club", inversedBy="seasons")
**/
private $club;
...
}