Doctrine 防止对象删除
Doctrine prevent object deletion
在我的项目中,我有两个实体:planifications 和 selections.
这两个对象之间存在关系:规划必须包含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 语句数据库模式。
在我的项目中,我有两个实体:planifications 和 selections.
这两个对象之间存在关系:规划必须包含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 语句数据库模式。