繁体   English   中英

获取Laravel的记录总数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM