Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel获取记录总数?_Php_Mysql_Laravel_Laravel 4 - Fatal编程技术网

Php 使用Laravel获取记录总数?

Php 使用Laravel获取记录总数?,php,mysql,laravel,laravel-4,Php,Mysql,Laravel,Laravel 4,MySQL有一个功能,可以获取查询返回的记录总数,没有限制,SQL\u CALC\u FOUND\u ROWS。拉威尔支持这一点吗 目前,我必须在两个查询中完成此操作: public function dataTable() { $bookings = DB::table('bookings') ->limit(Input::query('iDisplayLength')) ->offset(Input::query('iDisplayStar

MySQL有一个功能,可以获取查询返回的记录总数,没有限制,
SQL\u CALC\u FOUND\u ROWS
。拉威尔支持这一点吗

目前,我必须在两个查询中完成此操作:

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\u CALC\u FOUND\u行,然后在查询之后运行FOUND\u行。为此,我重写了Laravel getModels()方法


我有。

谢谢你的提示,但我不能那样使用它。
SQL\u CALC\u FOUND\u ROWS
后面不能有逗号,Laravel添加逗号是因为它认为它是一个常规列。Laravel不添加逗号。@itachi:有些东西是,因为它生成的SQL是“从
bookings
limit 25 offset 0中选择SQL\u CALC\u FOUND\u行,
created\u at
first\u name
last\u name
这是一个SQL错误。我尝试了
DB::table('foo')->选择(数组(DB::raw('SQL\CALC\u FOUND ROWS*))->toSql()
它从'foo'返回
select SQL\u CALC\u FOUND\u ROWS*
Oh…我正在做
->select(DB::raw('SQL\u CALC\u FOUND\u ROWS'),'created\u at',…)
。我想我可以把所有的行都放在原始位置。你想要这个解决方案用于Laravel Datatable包吗?如果需要的话,有一个基本的解决方案。@Yilmazerhakan不,谢谢。对于我的需要,这看起来太复杂了。不过我不介意知道它们是如何计算的——它们都是单独的查询吗?