我在 webman 框架里开发,使用了分页查询数据 forPage($param['page'], $param['perPage']) ,默认 page = 1,perPage = 10 ,我使用了 return json([ 'code' => 200100, 'msg' => "请求成功", 'data' => $data, ]); 来返回json数据格式,但是奇怪的事情发生了,第一页返回的是:
{
"code": 200100,
"msg": "请求成功",
"data": [
篇幅有限,数据省略.......
]
}
如果是第二页的话,返回:
{
"code": 200100,
"msg": "请求成功",
"data": {
篇幅有限,数据省略.......
}
}
第一页 data 是数组格式,第二页data是对象格式。啥原因?
这是我的 SQL:
$data = Db::table('skiinfo')
->selectRaw('id, logo, name, email, phone, areainfo_id, address, images, tag, introduce, lat, lon, lang, created_at, updated_at,
( 6371 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians(?)) + sin( radians(?) ) * sin( radians( lat ) ) )) AS distance', [$param['lat'], $param['lon'], $param['lat']])
->where('lang', '=', $param['lang'])
->whereNull('deleted_at')
->get()
->forPage($param['page'], $param['perPage'])
->map(function ($res) {
$res->logo = config('app.host_name').$res->logo;
$res->ticketinfo = Db::table('ticketinfo')
->select('elderly_price', 'adults_price', 'children_price')
->where('skiinfo_id', '=', $res->id)
->get();
return $res;
});
输出的方式为:
return json([
// 'HTTP_OK' => [200100, '请求成功'],
'code' => config('myconfig.statusCode.HTTP_OK')[0],
'msg' => config('myconfig.statusCode.HTTP_OK')[1],
'data' => $data,
]);
最后我加了->toArray(); 也不行。请求大神们指点!
这样js收到的是数组
这样收到的是对象
也就是数组的key不是从0到N的连续值就会判定为对象
这样强制重置下key应该就好了
感谢six ,按你的方法,再加上 toArray() 就解决了,谢谢!
以前也遇到过,发现是某页数据中间中断,比如被unset掉,这时需要重置索引,从1开始,中间不能间断
用 map 在循环中进行查询添加数据,这可不是个好主意。
那应该怎么写更好?小白求示例。
使用关联模型,可以将循环中的多个查询简化为一个查询,并且自动将数据作为字段关联进来。
其实就是索引数组和关联数组的区别