Symfony2 + Doctrine2 onDelete =“restrict”

时间:2015-10-24 16:11:29

标签: symfony orm doctrine-orm

我想限制对象的删除操作,但它不起作用。

我的第一个实体的代码:

/**
 * @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;

  ...
}

0 个答案:

没有答案