我有一个表,其中包含一个我必须作为对象获取的列中的JSON 但是当我使用laravel模型提取数据时,它显然会返回JSON或字符串,我必须解码每个地方,我使用这个模型(这不是干的概念)但事情是如果我拉一个记录和一个地方然后它只有一次执行代码而且还可以,但是如果我必须提取数据和多个地方的集合那么我必须每次运行相同的解码在laravel中有任何方法可以为我做而不是使用自制循环
这是表格
+-----------------------------------------------------------------------------+
| table |
+-----------------------------------------------------------------------------+
|id | title | text |
+-----------------------------------------------------------------------------+
| 1 | A1 | {"subject":"Subject1","word":"Lorem ipsum dolor sit amet, ..."} |
| 2 | A2 | {"subject":"Subject2","word":"Lorem ipsum dolor sit amet, ..."} |
| 3 | A3 | {"subject":"Subject3","word":"Lorem ipsum dolor sit amet, ..."} |
| 4 | A4 | {"subject":"Subject4","word":"Lorem ipsum dolor sit amet, ..."} |
| 5 | A5 | {"subject":"Subject5","word":"Lorem ipsum dolor sit amet, ..."} |
| 6 | A6 | {"subject":"Subject6","word":"Lorem ipsum dolor sit amet, ..."} |
| 7 | A7 | {"subject":"Subject7","word":"Lorem ipsum dolor sit amet, ..."} |
| 8 | A8 | {"subject":"Subject8","word":"Lorem ipsum dolor sit amet, ..."} |
| 9 | A9 | {"subject":"Subject9","word":"Lorem ipsum dolor sit amet, ..."} |
| 10| A10 | {"subject":"Subject10","word":"Lorem ipsum dolor sit amet..."} |
+-----------------------------------------------------------------------------+
我试过这个
$tables = TableModel::all();
foreach ($tables as &$table) {
$table->text = json_decode($table->text);
}
结果我想要的
Array
(
[0] => stdClass Object
(
[id] => 1
[title] => A1
[text] => stdClass Object
(
[subject] => Subject1
[word] => Lorem ipsum dolor sit amet...
)
)
[1] => stdClass Object
(
[id] => 2
[title] => A2
[text] => stdClass Object
(
[subject] => Subject2
[word] => Lorem ipsum dolor sit amet...
)
)
...
)
如果有任何简单的方法可以提高效率并且干燥 然后与我分享。
提前致谢。
答案 0 :(得分:1)
每次从数据库中获取记录时,都可以使用Attribute Casting
概念以所需格式获取结果。要从JSON转换为Array,您可以使用以下代码。
protected $casts = [
'text' => 'array',
];
正如Official Documentation中提到的那样。