获取Laravel的记录总数?

时间:2014-03-30 18:34:41

标签: php mysql laravel laravel-4

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()条件,就会有很多冗余代码。

3 个答案:

答案 0 :(得分:4)

对于任何复杂或特定于供应商的查询,您通常必须直接使用DB::raw()传递查询,例如:

$bookings = DB::table('bookings')
    ->select(DB::raw('SQL_CALC_ROWS_FOUND ...

答案 1 :(得分:2)

精制了@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()获取计数;

答案 2 :(得分:1)

我遇到过这个问题,因为我想要对已经包含GROUP BY的一组结果进行分页,而Laravel的内置paginate()方法使用COUNT(*)并且不能与GROUP一起使用BY

所以我最终扩展了Builder类,在运行查询之前注入SQL_CALC_FOUND_ROWS,然后立即运行FOUND_ROWS。我通过覆盖Laravel getModels()方法来做到这一点。

uploaded the code here