Php 使用Laravel获取记录总数?
MySQL有一个功能,可以获取查询返回的记录总数,没有限制,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
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不,谢谢。对于我的需要,这看起来太复杂了。不过我不介意知道它们是如何计算的——它们都是单独的查询吗?