Php 为什么Laravel在数据库中存储两种不同的数组语法?哪一种是正确的?
我来自Javascript和Ruby的背景,这让我感到困惑。根据我处理数组序列化的方式,Laravel可以在我的数据库中存储两种不同的数组语法。据我所知,Php 为什么Laravel在数据库中存储两种不同的数组语法?哪一种是正确的?,php,arrays,laravel,laravel-5,eloquent,Php,Arrays,Laravel,Laravel 5,Eloquent,我来自Javascript和Ruby的背景,这让我感到困惑。根据我处理数组序列化的方式,Laravel可以在我的数据库中存储两种不同的数组语法。据我所知,collect()创建了一个真正的Laravel数组。那么,它为什么要存储序列化数组呢?此外,{'key':'value'}语法是否仍然是一个数组,尽管它周围没有方括号?在我看来,它就像一个标准对象或散列,但如果我尝试对其执行toArray(),它会识别出它已经是一个数组并抛出一个错误。什么是我的误解,什么是正确的 给出一个表格: 编辑.bla
collect()
创建了一个真正的Laravel数组。那么,它为什么要存储序列化数组呢?此外,{'key':'value'}
语法是否仍然是一个数组,尽管它周围没有方括号?在我看来,它就像一个标准对象或散列,但如果我尝试对其执行toArray()
,它会识别出它已经是一个数组并抛出一个错误。什么是我的误解,什么是正确的
给出一个表格:
编辑.blade:
<select class="form-control m-bootstrap-select m_selectpicker" name="temp">
<option value={{ json_encode(array("$key"=>"$cph"), JSON_FORCE_OBJECT) }}>
</select>
Laravel在我的数据库中存储具有以下语法的数组:[“{\“11\”:\“1100\”}]
PageController.php
$page->cph_default = json_decode($request->temp, true);
$page->save();
Laravel在我的数据库中存储一个具有以下语法的数组:{“19”:“1900”}无论是什么
首先,如果要将数组排序到数据库中,请将其转换为JSON格式
例如
$variable=json\u encode($request->controlname)代码>
这是存储阵列的正确方法
进入数据库无论是什么
首先,如果要将数组排序到数据库中,请将其转换为JSON格式
例如
$variable=json\u encode($request->controlname)代码>
这是存储阵列的正确方法
在数据库中,语法为['key'=>'value']
的PHP数组称为关联数组,其作用类似于散列。JSON编码的关联数组将显示为JSON语法中的对象
Laravel的collect()
函数是一个方便的包装器,用于创建新的。集合不是真正的“真正的Laravel数组”,它是一个对象包装器,具有一些修改底层数组的方便方法。将其视为标量对象
在表单中,生成选项值时,提交的表单值($request->temp
)将是一个JSON编码的字符串。字符串{“19”:“1900”}
调用collect($request->temp)
不会修改提交的数据。它只是创建一个新集合(数组),其中包含一个字符串项。如果要对集合调用toArray()
,您会看到如下内容:
[
0 => '{"19": "1900"}'
]
请注意,这不是关联数组,而是一个索引为零的数字数组。此数组编码为JSON数组,而不是哈希对象。这就是你的第一个结果
调用json\u decode($request->temp)
将字符串转换回一个关联数组(散列),然后通过Eloquent保存。Eloquent然后在内部再次调用json\u encode()
,将其转换回与表单选项值相同的json
如果在创建集合之前对表单值进行解码,则生成的数据库保存看起来是相同的。您只需使用收集包装器即可:
$page->cph_default = collect(json_decode($request->temp, true));
$page->save();
如果将列视为JSON类型,则应确保传递给Eloquent的数据尚未编码,否则在第一个示例中会遇到双重编码。语法为['key'=>'value']
的PHP数组称为关联数组,其作用类似于散列。JSON编码的关联数组将显示为JSON语法中的对象
Laravel的collect()
函数是一个方便的包装器,用于创建新的。集合不是真正的“真正的Laravel数组”,它是一个对象包装器,具有一些修改底层数组的方便方法。将其视为标量对象
在表单中,生成选项值时,提交的表单值($request->temp
)将是一个JSON编码的字符串。字符串{“19”:“1900”}
调用collect($request->temp)
不会修改提交的数据。它只是创建一个新集合(数组),其中包含一个字符串项。如果要对集合调用toArray()
,您会看到如下内容:
[
0 => '{"19": "1900"}'
]
请注意,这不是关联数组,而是一个索引为零的数字数组。此数组编码为JSON数组,而不是哈希对象。这就是你的第一个结果
调用json\u decode($request->temp)
将字符串转换回一个关联数组(散列),然后通过Eloquent保存。Eloquent然后在内部再次调用json\u encode()
,将其转换回与表单选项值相同的json
如果在创建集合之前对表单值进行解码,则生成的数据库保存看起来是相同的。您只需使用收集包装器即可:
$page->cph_default = collect(json_decode($request->temp, true));
$page->save();
如果将列视为JSON类型,则应确保传递给Eloquent的数据尚未编码,否则在第一个示例中会遇到双重编码。从表单传递的数据是JSON。在第一个示例中,从1个字符串(您的json)创建集合,然后在将其插入数据库之前对其再次进行json_编码(这就是它被转义的原因)。在收集
之前,需要使用json\u decode
。从表单传递的数据是json。在第一个示例中,从1个字符串(您的json)创建集合,然后在将其插入数据库之前对其再次进行json_编码(这就是它被转义的原因)。您需要在收集之前使用json\u decode
。非常感谢您的解释。你的回答真的超出了我的理解范围,非常有帮助。非常感谢你的解释。你的回答真的超出了你的想象,而且非常有帮助。