Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么Laravel在数据库中存储两种不同的数组语法?哪一种是正确的?_Php_Arrays_Laravel_Laravel 5_Eloquent - Fatal编程技术网

Php 为什么Laravel在数据库中存储两种不同的数组语法?哪一种是正确的?

Php 为什么Laravel在数据库中存储两种不同的数组语法?哪一种是正确的?,php,arrays,laravel,laravel-5,eloquent,Php,Arrays,Laravel,Laravel 5,Eloquent,我来自Javascript和Ruby的背景,这让我感到困惑。根据我处理数组序列化的方式,Laravel可以在我的数据库中存储两种不同的数组语法。据我所知,collect()创建了一个真正的Laravel数组。那么,它为什么要存储序列化数组呢?此外,{'key':'value'}语法是否仍然是一个数组,尽管它周围没有方括号?在我看来,它就像一个标准对象或散列,但如果我尝试对其执行toArray(),它会识别出它已经是一个数组并抛出一个错误。什么是我的误解,什么是正确的 给出一个表格: 编辑.bla

我来自Javascript和Ruby的背景,这让我感到困惑。根据我处理数组序列化的方式,Laravel可以在我的数据库中存储两种不同的数组语法。据我所知,
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
。非常感谢您的解释。你的回答真的超出了我的理解范围,非常有帮助。非常感谢你的解释。你的回答真的超出了你的想象,而且非常有帮助。