数据库数据是这样的:
想通过having语句把counts > 0
的取出来;
用到分页,所以having
后面连缀分页函数paginate
但是这样报错了:
如果我having
后面连缀的是get()
函数则没问题,
是可以查到counts > 0
的数据的
这是怎么回事呢?
是having
后面连缀分页函数paginate
存在的bug还是?
怎么解决好?
数据库数据是这样的:
想通过having语句把counts > 0
的取出来;
用到分页,所以having
后面连缀分页函数paginate
但是这样报错了:
如果我having
后面连缀的是get()
函数则没问题,
是可以查到counts > 0
的数据的
这是怎么回事呢?
是having
后面连缀分页函数paginate
存在的bug还是?
怎么解决好?
public function paginate($perPage = 15, $columns = ['*'], $pageName = 'page', $page = null)
{
$page = $page ?: Paginator::resolveCurrentPage($pageName);
$total = $this->getCountForPagination($columns);
$results = $total ? $this->forPage($page, $perPage)->get($columns) : collect();
return new LengthAwarePaginator($results, $total, $perPage, $page, [
'path' => Paginator::resolveCurrentPath(),
'pageName' => $pageName,
]);
}
paginate默认取表里的字段,表里是木有counts
的
可换成skip($offset)->take($limit)
having方法改一下就好了
改成havingRaw()
还有在select()方法类不要直接使用‘count(*) as total’,需要改为DB::raw('count(*) as total')
完整参考,忽略业务,只看代码
CouponModel::select('product_coupon.*','p.*', DB::raw('count(*) as total'))
->where('p.platformId',$platformIds)
->leftJoin('product as p','p.productId','=','product_coupon.productId')
->groupBy('product_coupon.productId')
->havingRaw('count(*) as total','>', 0)
->orderBy('id','desc')
->orderBy('total','desc')
->paginate($this->pageNum);
你好,我今天也遇到这个问题了,把Paginate换成simplePaginate即可