symfony - Easy-admin 数组字段覆盖值
问题描述
我正在使用 Doctrine 的 2.7.0 版和easycorp/easyadmin-bundle的 2.3.4 版。我班的人有宠物安排
/**
* @ORM\Entity
* /
class person
{
// ...
/ **
* @ORM \ Column (type = "array")
*
* /
private $ pets = [];
}
创建或编辑人员对象及其宠物的表单效果很好,但有时在编辑视图中某些值会被覆盖。
解决方案
解决方案:
要解决这个问题,您只需将宠物的注释设置为'simple_array'而不是'array'。它看起来像这样:
/**
* @ORM \ Entity
* /
class person
{
// ...
/ **
* @ORM \ Column (type = "simple_array")
*
* /
private $ pets = [];
}
解释:
发生这种情况是因为当你放置一个像数组这样的字段时,Doctrine 除了保存值之外,还会保存在数组中具有该值的索引之类的东西,所以如果你有一个人具有 cat 和 dog 值,它会存储为如下:a:2:{i:0;s:3:“猫”;我:1;s: 3: "dog";}表示该排列有 2 个元素,位置 0 是 cat,位置 1 是 dog。
然后每次生成用于编辑的视图时,将使用名称创建两个输入: 值为cat的person[pets][0]和值为dog的person[pets][1]。
但是,如果您单击“添加元素”按钮,则将考虑表单已有的输入量,以便它创建一个名为person[pets][2]的新表单,如果始终删除最后一项在列表中不会有任何问题,但是如果您删除例如名称为person[pets][0]的第一个输入,则输入量的值为 1,因此创建的新输入将与命名person[pets][1]所以你会覆盖dog的值。
但是,当在数据库中将字段pets保存为simple_array时,仅保存值:cat, dog,因此每次构造视图以编辑索引时,它们总是从头开始,永远不会被覆盖
推荐阅读
- ftp - VS Code 远程工作区扩展不起作用
- reactjs - 语义 ui 反应下拉所选项目图标
- c - 在 c 中将图像旋转 x 角度
- java - 从表格制作图形人口地图
- python - python / windows - 无法安装 lasio python 包 - RequirementParseError
- ruby-on-rails - Custom create action in ActiveAdmin
- asp.net - 在 TemplateField 中创建的按钮的 onClick 函数中访问单元格内容
- python - 什么决定了这个 python 3 代码中集合元素的顺序?
- java - 为什么这个数组循环?
- javascript - 使用 JavaScript/JQuery 过滤 HTTP 请求