首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从oneToMany关系中删除项目。空值而不是移除

从oneToMany关系中删除项目。空值而不是移除
EN

Stack Overflow用户
提问于 2021-09-26 20:36:28
回答 1查看 42关注 0票数 0

我有这些实体

代码语言:javascript
运行
复制
 class Centro {   
 /* ... */

 /**
 * @ORM\OneToMany(targetEntity=NivelesEscolares::class, mappedBy="centro", cascade={"persist", "remove"}, orphanRemoval=true)
 */
 private $nivelesEscolares;
 /* ... */
 }

中心链接到具有NivelesEscolares实体的OneToMany关系。下面是语句

代码语言:javascript
运行
复制
 class NivelesEscolares
 {
 /*...*/

 /**
  * @ORM\ManyToOne(targetEntity=App\Entity\Centro::class, inversedBy="nivelesEscolares")
  */
 private $centro;

 }

当我删除一个中心时,学校级别应该被删除,但它变成了null。我已经尝试了orphanRemoval,但它仍然没有删除任何东西。也尝试使用onDelete = "CASCADE“,但它不会删除任何内容。我需要OneToMany关系方面的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-09-27 07:01:52

好吧,orphanRemoval和onDelete有一点不同,如下所示:

1. orphanRemoval="true"

  • 当拥有方实体存在并且不再连接到任何其他拥有方实体时,反向方实体将被删除。并不完全正确,这使得理论表现得好像它不属于其他实体,从而在ORM

中删除it.

  • implementation

2. onDelete="CASCADE"

在DATABASE

  • This策略中,这将在
  • 列中添加Delete Cascade,这有点棘手,但可以是very powerful and fast。(这是《教义官方教程》的引文…但是还没有看到更多的explaination)
  • ORM需要做更少的工作(与前面的两种方式相比),因此应该有更好的性能。如果您想在删除Centro时删除NivelesEscolares,只需使用onDelete,而不是像这样使用orphanRemoval

Centro 应该如下所示:

代码语言:javascript
运行
复制
 class Centro {   
 /* ... */

 /**
 * @ORM\OneToMany(targetEntity=NivelesEscolares::class, mappedBy="centro", cascade={"persist", "remove"})
 */
 private $nivelesEscolares;
 /* ... */
 }

此外,还可以将onDelete NivelesEscolares NivelesEscolares结合使用,如下所示:

代码语言:javascript
运行
复制
 class NivelesEscolares
 {
 /*...*/

 /**
  * @ORM\ManyToOne(targetEntity=App\Entity\Centro::class, inversedBy="nivelesEscolares")
  * @ORM\JoinColumn(onDelete="CASCADE")
  */
 private $centro;

 }

就像你说的那样,这将迫使教义取消“学校级别”,享受吧!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69338763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档