我在数组中有一个JSON数组:
{
layouts: [
{
w: 6,
h: 4,
x: 0,
y: 0,
i: "n0",
minW: 1.5,
minH: 1,
maxH: 1000,
moved: false,
static: false,
widget: "Clock"
},
{
w: 2,
h: 2,
x: 0,
y: 4,
i: "n1",
minW: 1,
minH: 1,
maxH: 1000,
moved: false,
static: false,
widget: "Weather"
}
]
}
我需要将每个小部件布局存储在数据库中。当我尝试执行查询时,它返回一个错误,即值是空的。我尝试了here中的一些示例,但它们对我不起作用。
功能:
public function store(Request $request)
{
$JSON = json_decode($request);
foreach (array($JSON) as $data) {
$i = 0;
$w = $data[$i]['w'];
$h = $data[$i]['h'];
$x = $data[$i]['x'];
$y = $data[$i]['y'];
$i = $data[$i]['i'];
$minW = $data[$i]['minW'];
$minH = $data[$i]['minH'];
$maxH = $data[$i]['maxH'];
$moved = $data[$i]['moved'];
$static = $data[$i]['static'];
$type = $data[$i]['type'];
DB::table('widgets')->insert(
['w' => $w,
'h' => $h,
'x' => $x,
'y' => $y,
'i' => $i,
'minW' => $minW,
'minH' => $minH,
'maxH' => $maxH,
'moved' => $moved,
'static' => $static,
'type_widget' => $type]
);
$i++;
}
return response()->json(201);
}
谁能告诉我在数据中循环保存的正确方法是什么?
答案 0 :(得分:3)
您需要使用json_decode($array, true)
的第二个参数(true
)表示需要将输入字符串转换为关联数组,以正确解析JSON。
您还可以使用Request
直接从$request->all()
提取JSON。我建议使用这种方法,因为它要容易得多,并且始终可以正确解析数组。解码Request
对象可能会导致数组格式与原始提交的数组格式不同(除了数据之外,还包含Request对象本身的数据)。
答案 1 :(得分:1)
当Sven Hakvoorts回答成功时,这是foreach的简化版本
$i = 0;
$data = json_decode($request, true);
while (isset($data['layouts'][$i])) {
DB::table('widgets')->insert($data['layouts'][$i]);
$i++;
}
更短(也是最好的方法):
foreach ($data['layouts'] as $row) {
DB::table('widgets')->insert($row);
}
我认为您只需重命名一列即可使此短代码起作用:type_widget进行键入,这样您的字段和列名相等,这将导致代码缩短很多。
答案 2 :(得分:0)
1。
$JSON = json_decode($request);
将其更改为
$JSON = json_decode($request,true);
2。 从foreach循环中删除$ i = 0并将其放置在befor foreach循环中