为什么Laravel在数据库中存储两种不同的数组语法,哪一种是正确的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Laravel在数据库中存储两种不同的数组语法,哪一种是正确的?相关的知识,希望对你有一定的参考价值。
我来自javascript和Ruby背景,这令我感到困惑。 Laravel可以在我的数据库中存储两种不同的数组语法,具体取决于我如何处理数组序列化。根据我的理解,collect()
创建了一个真正的Laravel数组。为什么它存储序列化数组呢?此外,尽管围绕它没有方括号,{'key':'value'}
syntax仍然是一个阵列吗?它看起来像一个标准对象或哈希,但如果我尝试在它上面做toArray()
,它会识别它已经是一个数组并抛出一个错误。我有什么误解,这里有什么问题?
给出一个形式:
edit.blade:
<select class="form-control m-bootstrap-select m_selectpicker" name="temp">
<option value={{ json_encode(array("$key"=>"$cph"), JSON_FORCE_OBJECT) }}>
</select>
以下两个控制器语法产生不同的数据库插入。
PageController.php:
$page->cph_default = collect($request->temp);
$page->save();
Laravel在我的数据库中存储具有以下语法的数组:[“{”11 “:”1100 “}”]
PageController.php
$page->cph_default = json_decode($request->temp, true);
$page->save();
Laravel在我的数据库中存储具有以下语法的数组:{“19”:“1900”}
使用语法['key' => 'value']
的PHP数组称为关联数组,其作用类似于哈希。 JSON编码的关联数组将以JSON语法显示为对象。 Examples and more info on PHP.net
Laravel的collect()
功能是创建新的Collection的便利包装。 Collection不是真正的“真正的Laravel数组”,因为它是一个对象包装器,带有一些方便的方法来修改底层数组。把它想象成一个标量物体。
在生成选项值的表单中,提交的表单值($request->temp
)将是JSON编码的字符串。字面意思是字符串'{"19": "1900"}'
。
调用collect($request->temp)
不会修改提交的数据。它只是创建一个包含单个字符串项的新Collection(数组)。如果你打算在集合上调用toArray()
,你会看到这样的东西:
[
0 => '{"19": "1900"}'
]
请注意,这不是关联数组,它是具有从零开始的索引的数字数组。此数组编码为JSON数组,而不是哈希对象。因此你的第一个结果。
在通过Eloquent保存之前,调用json_decode($request->temp)
将字符串转换回关联数组(哈希)。然后,Eloquent再次在内部调用json_encode()
,将其重新转换为与表单选项值相同的JSON。
如果在创建集合之前解码表单值,则生成的数据库保存看起来相同。你只是拥有Collection包装器的便利:
$page->cph_default = collect(json_decode($request->temp, true));
$page->save();
如果您将列视为JSON类型,则应确保传递给Eloquent的数据尚未编码,或者您将在第一个示例中获得经历的双重编码。
无所谓是什么。
首先如果要将数组存储到数据库中,请转换为qazxsw poi
例如JSON FORMAT
这是存储数组的正确方法
进入数据库
以上是关于为什么Laravel在数据库中存储两种不同的数组语法,哪一种是正确的?的主要内容,如果未能解决你的问题,请参考以下文章
当数据包含具有两种不同数据类型的嵌套数组时,在 PySpark 中定义模式