Easy-admin 数组字段覆盖值
Easy-admin array field overwrites values
我正在使用 Doctrine 的 2.7.0 版和 easycorp/easyadmin-bundle 的 2.3.4 版。我的 class 人有宠物安排
/**
* @ORM\Entity
* /
class person
{
// ...
/ **
* @ORM \ Column (type = "array")
*
* /
private $ pets = [];
}
创建或编辑人物对象及其宠物的表单效果很好,但有时在编辑视图中某些值会被覆盖。
解法:
要解决这个问题,你所要做的就是将宠物的注释设置为'simple_array'而不是'array'.它看起来像这样:
/**
* @ORM \ Entity
* /
class person
{
// ...
/ **
* @ORM \ Column (type = "simple_array")
*
* /
private $ pets = [];
}
解释:
发生这种情况是因为当你放置一个像 array 这样的字段时,Doctrine 除了保存值外还会保存数组中具有该值的索引之类的东西,所以如果你有一个具有 cat 和 dog 值的人,它存储如下: a: 2: {i: 0;小号:3:"cat";我:1; s: 3: "dog";} 这表示排列有 2 个元素,位置 0 是猫,位置 1 是狗。
然后每次生成视图进行编辑时,都会创建两个输入,名称如下:
person[pets][0] 的值为 cat 和 person[pets][1] 的值值 dog.
但是,如果您单击 添加元素 按钮,将考虑表单已有的输入量,以便创建一个新的名称person[pets][2],如果您总是删除列表中的最后一项,则不会有任何问题,但是如果您删除例如名称为 [=25= 的第一个输入]person[pets][0],输入的数量将为值 1,因此创建的新输入的名称为 person[pets][1] 所以你会覆盖 dog.
的值
但是,当在数据库中将字段pets保存为simple_array时,只保存值:cat, dog, 所以每次构造视图编辑索引的时候总是从头开始,永远不会被覆盖
我正在使用 Doctrine 的 2.7.0 版和 easycorp/easyadmin-bundle 的 2.3.4 版。我的 class 人有宠物安排
/**
* @ORM\Entity
* /
class person
{
// ...
/ **
* @ORM \ Column (type = "array")
*
* /
private $ pets = [];
}
创建或编辑人物对象及其宠物的表单效果很好,但有时在编辑视图中某些值会被覆盖。
解法:
要解决这个问题,你所要做的就是将宠物的注释设置为'simple_array'而不是'array'.它看起来像这样:
/**
* @ORM \ Entity
* /
class person
{
// ...
/ **
* @ORM \ Column (type = "simple_array")
*
* /
private $ pets = [];
}
解释:
发生这种情况是因为当你放置一个像 array 这样的字段时,Doctrine 除了保存值外还会保存数组中具有该值的索引之类的东西,所以如果你有一个具有 cat 和 dog 值的人,它存储如下: a: 2: {i: 0;小号:3:"cat";我:1; s: 3: "dog";} 这表示排列有 2 个元素,位置 0 是猫,位置 1 是狗。
然后每次生成视图进行编辑时,都会创建两个输入,名称如下: person[pets][0] 的值为 cat 和 person[pets][1] 的值值 dog.
但是,如果您单击 添加元素 按钮,将考虑表单已有的输入量,以便创建一个新的名称person[pets][2],如果您总是删除列表中的最后一项,则不会有任何问题,但是如果您删除例如名称为 [=25= 的第一个输入]person[pets][0],输入的数量将为值 1,因此创建的新输入的名称为 person[pets][1] 所以你会覆盖 dog.
的值但是,当在数据库中将字段pets保存为simple_array时,只保存值:cat, dog, 所以每次构造视图编辑索引的时候总是从头开始,永远不会被覆盖