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] 的值为 catperson[pets][1] 的值值 dog.

但是,如果您单击 添加元素 按钮,将考虑表单已有的输入量,以便创建一个新的名称person[pets][2],如果您总是删除列表中的最后一项,则不会有任何问题,但是如果您删除例如名称为 [=25= 的第一个输入]person[pets][0],输入的数量将为值 1,因此创建的新输入的名称为 person[pets][1] 所以你会覆盖 dog.

的值

但是,当在数据库中将字段pets保存为simple_array时,只保存值:cat, dog, 所以每次构造视图编辑索引的时候总是从头开始,永远不会被覆盖