关于在lumen/laravel中使用count时返回值为0的问题
之前有用lumen在做项目的api,因为要用到分页查询,而lumen不能用laravel自带的分页查询,于是用了网上提供的思路(lumen与laravel用的是同一个数据库方法)
以下是分页方法的代码:
private function pagination($request, $dbBuild) {
$this->validate($request, [
'pageSize' => 'bail|filled|integer',
'pageIndex' => 'bail|filled|integer',
]);
$pageSize = $request->input('pageSize', $this->defaultPageSize);
$pageIndex = $request->input('pageIndex', $this->defaultPageIndex);
$offset = $pageSize * ($pageIndex - 1);
$total = $dbBuild->count();
$dbBuild = $dbBuild
->offset($offset)
->limit($pageSize);
return [
'data' => $dbBuild->get(),
'total' => $total,
];
}
以下是我使用时的代码:
//...其他代码
$dbBuild = DB::connection('dbname')
->table('table')
->where('id',$id);
$data = $this->pagination($request,$dbBuild)['data'];
$count = $this->pagination($request,$dbBuild)['total'];
//...其他代码
复现方法:
第一次的请求数据为
id = 50
pageSize = 14
pageIndex = 1
第二次的请求数据为
id = 50
pageSize = 14
pageIndex = 2
在第二次的请求时返回的count值为0
lumen与laravel用的是同一个数据库方法,本人水平比较低,源码没有弄明白
奇怪的是,使用$dbBuild->count()
同样取不到数据,但使用DB::connection('dbname')->table('table')->where('id',$id)->count()
就可以
打印了$dbBuild
与查询语句发现只有以下不同
猜测可能是长连接的问题?
我的解决方案:
//...其他代码
$dbBuild = DB::connection('dbname')
->table('table')
->where('id',$id);
$pagination = $this->pagination($request,$dbBuild);
$data = $pagination['data'];
$count = $pagination['total'];
//...其他代码
改为以上代码就可以正常的返回count值
想看看大佬们对这个问题的看法
方法已经返回了想要的数据,然后你第一次重复调用,对象已经不是这个$dbBuild最初的对象了