【发布时间】:2019-05-31 12:13:21
【问题描述】:
我来自 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"}
【问题讨论】:
-
您从表单传递的数据是 json。在您的第一个示例中,您从 1 个字符串(您的 json)创建集合,然后在将其插入数据库之前再对其进行一次 json_encoded(这就是它被转义的原因)。你需要在
collect之前使用json_decode。
标签: php arrays laravel laravel-5 eloquent