Laravel数组为什么要对元素进行排序,并且可以避免?

时间:2018-07-07 22:49:26

标签: laravel eloquent

我在数据库中有一个JSON字段,该字段是使用Eloquent模型上的数组填充的。

在保存字段之前,Laravel按元素的键对元素进行排序。大概是在序列化期间发生的。

为什么要这样做?有没有办法防止它发生?

2 个答案:

答案 0 :(得分:1)

如果不需要按字段实现搜索,可以使用text类型代替json类型。在保存之前,您需要自己执行 json_encode,或者自己实现一个 mutator。

答案 1 :(得分:0)

我以前从未遇到过这种行为,但是也许您可以尝试使用访问器和更改器来完成所需的操作。假设您的数据库列为meta。您可以在模型中使用Laravel的特殊setAttributegetAttribute方法。

A mutator

例如,要json_encode将要保存到数据库中的数据,它将是:

public function setMetaAttribute($value)
{
    $this->attributes['meta'] = json_encode($value);
}

An accessor

要对json_decode数据进行检索,就应该是:

public function getMetaAttribute($value)
{
    return json_decode($value, true);
}

经验法则是使用getset,并在列名后附加首字母大写并删除所有下划线,然后在方法名后附加Attribute。例如。 active_users列变为getActiveUsersAttribute,依此类推。

尝试一下,看看它是否进行了时髦的排序。