我在数据库中有一个JSON字段,该字段是使用Eloquent模型上的数组填充的。
在保存字段之前,Laravel按元素的键对元素进行排序。大概是在序列化期间发生的。
为什么要这样做?有没有办法防止它发生?
答案 0 :(得分:1)
如果不需要按字段实现搜索,可以使用text类型代替json类型。在保存之前,您需要自己执行 json_encode,或者自己实现一个 mutator。
答案 1 :(得分:0)
我以前从未遇到过这种行为,但是也许您可以尝试使用访问器和更改器来完成所需的操作。假设您的数据库列为meta
。您可以在模型中使用Laravel的特殊setAttribute
和getAttribute
方法。
例如,要json_encode
将要保存到数据库中的数据,它将是:
public function setMetaAttribute($value)
{
$this->attributes['meta'] = json_encode($value);
}
要对json_decode
数据进行检索,就应该是:
public function getMetaAttribute($value)
{
return json_decode($value, true);
}
经验法则是使用get
或set
,并在列名后附加首字母大写并删除所有下划线,然后在方法名后附加Attribute
。例如。 active_users
列变为getActiveUsersAttribute
,依此类推。
尝试一下,看看它是否进行了时髦的排序。