php - 从 oneToMany 关系中删除一个项目。空值而不是删除
问题描述
我有这些实体
class Centro {
/* ... */
/**
* @ORM\OneToMany(targetEntity=NivelesEscolares::class, mappedBy="centro", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $nivelesEscolares;
/* ... */
}
Center 与 NivelesEscolares 实体链接到 OneToMany 关系。这是声明
class NivelesEscolares
{
/*...*/
/**
* @ORM\ManyToOne(targetEntity=App\Entity\Centro::class, inversedBy="nivelesEscolares")
*/
private $centro;
}
当我删除一个中心时,应该删除学校级别,但它会变为空。我已经尝试过 orphanRemoval 但它仍然没有删除任何东西。也尝试使用 onDelete = "CASCADE" 但它不会删除任何内容。我需要 OneToMany 关系方面的帮助。
解决方案
好吧 orphanRemoval 和 onDelete 有一些区别如下:
1.orphanRemoval="true"
- 当拥有方实体是并且它不再连接到任何其他拥有方实体时,反向方的实体将被删除。不完全是,这使得教义表现得好像它不属于其他实体,因此将其删除。
- ORM中的实现
2.onDelete="CASCADE"
- 这会将 On Delete Cascade 添加到数据库中的外键列
- 这个策略有点棘手,但可以
very powerful and fast
。(这是来自学说官方教程的引用......但没有看到更多解释) - ORM 要做的工作更少(与前两种方式相比),因此应该有更好的性能。如果您想在删除
NivelesEscolares
时删除,Centro
请使用onDelete
notorphanRemoval
like this:应该如下所示:
Centro
class Centro {
/* ... */
/**
* @ORM\OneToMany(targetEntity=NivelesEscolares::class, mappedBy="centro", cascade={"persist", "remove"})
*/
private $nivelesEscolares;
/* ... */
}
也可以onDelete
这样NivelesEscolares
使用@ORM\JoinColumn
:
class NivelesEscolares
{
/*...*/
/**
* @ORM\ManyToOne(targetEntity=App\Entity\Centro::class, inversedBy="nivelesEscolares")
* @ORM\JoinColumn(onDelete="CASCADE")
*/
private $centro;
}
正如您所说,这将迫使教义删除“学校级别”,享受吧!
推荐阅读
- android - 如何清除 ChromeCustomTabs 中的 cookie?
- bash - 将 nmap 结果分配给 bash 中的数组
- javascript - 如何使用按钮 onclick 功能在画布内插入文本?
- node.js - 如何从 Prisma 中的 MySql 关系表中获取数据
- javascript - 旁白没有阅读我在文本框中输入的内容
- asp.net - ASP.NET Web API - App.config 不起作用?
- ios - 自定义 UITextField 与 UILabel 多行支持错误文本
- c++ - 解析十六进制和二进制数
- php - 如何(COUNT)使用内部连接php获取属于帖子的总行数?
- python - 灰度颜色 (0-255) 到 MAtplotlib 颜色表示