[英]Get total number of records with Laravel?
MySQL有一个功能,用于获取查询将无限制地返回的记录总数SQL_CALC_FOUND_ROWS
。 Laravel支持这个吗?
目前我必须在两个查询中执行此操作:
public function dataTable() {
$bookings = DB::table('bookings')
->limit(Input::query('iDisplayLength'))
->offset(Input::query('iDisplayStart'))
->get();
$count = $bookings = DB::table('bookings')
->count();
return Response::json([
'iTotalRecords' => $count,
]);
}
这不仅会降低效率,而且一旦我添加了所有->where()
标准,就会有很多冗余代码。
对于任何复杂或特定于供应商的查询,您通常必须直接使用DB::raw()
传递查询,例如:
$bookings = DB::table('bookings')
->select(DB::raw('SQL_CALC_ROWS_FOUND ...
精制了@giaour所说的。
$bookings = DB::table('bookings')
->select(array(DB::raw('SQL_CALC_FOUND_ROWS booking_id,name')))
->where('...')
->orWhere('...')
->take(10)
->skip(50)
->get();
$bookingsCount = DB::select( DB::raw("SELECT FOUND_ROWS() AS Totalcount;") );
在SQL_CALC_FOUND_ROWS之后,您可以通过SQL_CALC_FOUND_ROWS()获取计数;
我遇到了这个问题,因为我想要对已经包含GROUP BY的一组结果进行分页,而Laravel的内置paginate()方法使用COUNT(*)并且不能与GROUP BY一起使用。
因此,我最终扩展了Builder类,以便在运行查询之前注入SQL_CALC_FOUND_ROWS,然后立即运行FOUND_ROWS。 我通过覆盖Laravel getModels()方法来做到这一点。
我在这里上传了代码 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.