代码之家  ›  专栏  ›  技术社区  ›  rakete

Eloquent以其他顺序存储数组强制转换的值

  •  0
  • rakete  · 技术社区  · 5 年前

    在我的代码中,我有一个雄辩的模型,它有一个JSON列 steps ,它被铸造为数组:

    protected $casts = [
        'steps'  => 'array',
    ];
    

    但是如果我知道用这样的数组更新列:

        $model->update([
            'steps' => [
                'connect' => 'A', 'clone' => 'A'
            ]
        ]);
    

    任何内部操作都会更改存储到数据库中的json数组的顺序,现在看起来如下所示:

    enter image description here

    有没有办法防止Elount在存储数组项时更改它们的顺序?

    小更新:数组在存储之前总是按键的字母顺序排序。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Mahdi Jedari    5 年前

    您的数据结构应该如下所示:

    [
        {"connect": "A"},
        {"clone": "A"}
    ]
    

    因为这是步骤数组,任何步骤都应该被视为一个单独的实体。

    $model->update([
        'steps' => [
            ['connect' => 'A'],
            ['clone' => 'A']
        ]
    ]);
    

    通过这种方式,不仅可以在数据库中存储正确的结构,还可以按所需的顺序存储。