首页 > 解决方案 > Easy-admin 数组字段覆盖值

问题描述

我正在使用 Doctrine 的 2.7.0 版和easycorp/easyadmin-bundle的 2.3.4 版。我班的人有宠物安排

/**
 * @ORM\Entity
 * /
class person
{
    // ...


    / **
     * @ORM \ Column (type = "array")
     *
     * /
    private $ pets = [];
}

创建或编辑人员对象及其宠物的表单效果很好,但有时在编辑视图中某些值会被覆盖。

标签: symfonyeasyadmin

解决方案


解决方案:

要解决这个问题,您只需将宠物的注释设置为'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。

然后每次生成用于编辑的视图时,将使用名称创建两个输入: 值为catperson[pets][0]和值为dog的person[pets][1]

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

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


推荐阅读