当前位置: 首页 > 知识库问答 >
问题:

使用Symfony集合(嵌入表单)与Doctrine时不希望更改主键值

甄越
2023-03-14

在工作中,我在Symfony 3.4/Doctrine/mySQL中有一个(旧的)项目,其中我使用了一组嵌入式表单。A类包含对象B(ManyToOne)的arrayCollection(原则一域一域)。

在创建或编辑时,对象A的输入形式允许使用“添加”按钮创建/修改/删除对象B的嵌入形式。它按预期工作。

原则级联(持久化/删除和孤儿删除)允许自动持久化对象A上的所有修改(包括新的/修改/删除嵌入的对象B)。

我通过严格遵循Symfony文档(getter、A和B上的setter、arrayCollections、条令属性)来实现所有这些。一切都很好,添加、修改、删除,但由于某种原因,我不知道,条令(我认为)改变了主键值​​每次添加/删除时的嵌入对象(B)。

例如,A的收藏中有3个孩子:

1: id/值=

2: id/值=

3:id/value=

我删除了#2,并在mySQL中看到:

1: id/值=

2: id/值=

val2已不存在,但val3的id为val2:val2的id已更改!

在Symfony profiler的“条令”选项卡中,我看到了条令(?)已更新(SQL更新))id 2以放置val3,然后删除(SQL删除)id 3。这会导致id发生变化,并在与外键的一致性方面带来很大问题。

我期望id 2只是被删除而不触及其余部分(这不会改变)。我不明白它是如何工作的。

有没有人以前遇到过这种情况,并且知道如何确保id得到保留?

我搜索了Symfony和Doctrine,但到目前为止,我还没有找到任何对我有帮助的东西。

谢谢你的帮助。

共有1个答案

商同
2023-03-14

通过删除导致集合项通过twig在视图中重新排序的任何内容以及删除注释中的排序sql顺序(ASC、DESC)来解决问题。

我还删除了集合中父级和子级之间链接上的孤立删除和级联(删除)注释,并在控制器中手动管理删除。

这可能不是解决问题的方法,但在效果更好之前,ID不再混合使用。

 类似资料:
  • 我有一个数据结构,其中一个主题有许多问题(一对多),一个问题有许多答案(一对多)。 我已经在主题表单中设置了问题作为嵌入式集合,由于有了烹饪书条目,我可以百分之百地解决所有问题。 当我试图开发它以在问题表单中嵌入一组答案表单时,我遇到了一个问题。 包含顶层原型表单的数据原型属性具有表单的全部深度,因此包括问题和答案的原型。但它对每个级别使用相同的占位符。 你可以在底部看到一条很长的线,我想这就是原

  • 有没有人在使用doctrine Embeddebles和symfony表单时遇到过这个问题? 如果你不知道可嵌入原则是什么,你可以在这里阅读http://doctrine-orm.readthedocs.org/en/latest/tutorials/embeddables.html 在表单提交时(在持久化到DB的过程中)将value对象(在我的情况下是CategoryType)与symfony表

  • 我一直在关注Symfony网站上的如何嵌入表单集合示例。 我的情况有点不同。我有两个条令实体,一个是实验,一个是目标,一个是复合主键关系(见下面的代码)。 基本上,一个实验可以有多个目标,但目标ID只有与实验ID和用户ID结合时才是唯一的。 我有一个ExperimentType表单,它嵌入了一个GoalType表单的集合。 在我的控制器中,我有以下代码: 我有javascript可以在页面上添加和

  • 问题内容: 我试图将我的SQL数据库中表的主键从现有键更改为复合键,其中不包括现有列。由于出现以下错误消息,因此以下代码无法正常工作: 删除主键: PRIMARY附近的语法不正确。预期为COLUMN,CONSTRAINT,ID或QUOTED_ID 添加主键: PRIMARY附近的语法不正确。 期望ID T-SQL代码: 编辑 我可以通过使用以下两个查询语句来完成此操作 我没有要求SQL“ DROP

  • 问题内容: 我希望HTML表单在提交后不执行任何操作。 这是不好的,因为它会导致页面重新加载。 基本上,我希望每当按下按钮或有人在键入数据后单击“输入”时都调用ajax函数。是的,我可以删除表单标签并添加,只需从按钮的onclick事件中调用该函数即可,但是我也希望“命中进入”功能而不会引起任何麻烦。 问题答案: 通过在通过“提交”按钮调用的javascript中使用,可以停止提交表单。 基本上,

  • 问题内容: 除了a 和Java 可以两次包含相同的元素外,a 和Java 之间在实践上还有什么区别吗?它们具有相同的方法。 (例如,是否给我更多选择来使用接受s但不接受s的库?) 编辑: 我可以认为至少有5种不同的情况来判断这个问题。其他人还能提出更多建议吗?我想确保我了解这里的微妙之处。 设计接受或参数的方法。更通用,并接受更多输入可能性。(如果我正在设计特定的类或接口,那么对我的消费者会更好,