Doctrine 防止对象删除

Doctrine prevent object deletion

在我的项目中,我有两个实体:planificationsselections.

这两个对象之间存在关系:规划必须包含ONE选择。同一个选择可以被多个planifications使用。

生成的代码如下所示:

// Planification.php - class Planification

  /**
    * @ORM\ManyToOne(targetEntity="App\Entity\Selection", inversedBy="planifications")
    * @ORM\JoinColumn(name="selection_id", referencedColumnName="id")
    */
  private $selection;


// Selection.php - class Selection

  /**
    * @ORM\OneToMany(targetEntity="App\Entity\Planification", mappedBy="selection")
    */
  private $planifications;

我想做的是不允许删除计划引用的选择。换句话说,如果计划包含一个选择 - 该选择不能被删除。发生在我身上的是,如果我尝试删除计划中的选择,操作成功完成,并且 Planification class 中的 $selection 成员包含 NULL

是否可以在教义上解决这个问题?我尝试添加 nullable=false(在 $selection 成员上)和 onDelete="NO ACTION",但两种解决方案均无效。

不允许 Planification::$selection 为 null 的正确 Doctrine 注释是:

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\Selection", inversedBy="planifications")
 * @ORM\JoinColumn(name="selection_id", nullable=false)
 */
  private $selection;

(您不需要 referencedColumnName 设置,因为它默认为 id,并且 nullable=false 进入 @JoinColumn 注释。

具有注释不会更新数据库以适应此特定定义。

执行 bin/console doctrine:schema:update --dump-sql 以查看需要的 SQL 来更新您的 table 定义,并 运行 针对您的数据库更新相应的 SQL 语句数据库模式。