在Laravel手动查询中不能使用SQL_CALC_FOUND_ROWS和FOUND_ROWS()吗?

问题描述 投票:1回答:1

我正在使用Laravel 5.2开发一个数据库驱动的网站。我正在使用Laravel的手动查询构建器。

我想要做的是在第一个查询中使用SQL_CALC_FOUND_ROWS并在第二个查询中选择FOUND_ROWS()。但它不能正常工作。我的代码如下。

$param = array();
$sql = "SELECT SQL_CALC_FOUND_ROWS `report_items`.`id`,`items`.`name` as `item_name`,`items`.`id` as `item_id`,`items`.`item_code`,`report_items`.`created_at`";
$sql .= ",`users`.`name` as `username`,`users`.`id` as `user_id`";
$sql .= " FROM `report_items` INNER JOIN `items` ON `items`.id=`report_items`.`item_id`";
$sql .= " INNER JOIN `users` ON `users`.`id`=`report_items`.`user_id`";
$sql .= " WHERE 1=1";

$sql .= " LIMIT ?,?";
$param[] = (int)$offset;
$param[] = (int)$limit;

$rows = DB::select($sql,$param);
$count = DB::select("SELECT FOUND_ROWS() as `row_count`")[0]->row_count;

如您所见,我想在第二个查询中检索找到的行。但它没有按预期工作。

第一个查询实际上返回3行。但是当我从第二个查询中检索结果时,行数始终为1。

我的查询有什么问题?

php mysql laravel laravel-5.2
1个回答
0
投票

您现在可以尝试更新Laravel。因为您的代码在Laravel 5.5及更高版本中运行。

您也可以使用Model查询获取FOUND_ROWS。例如:

$rows = User::query()
    ->select([
        DB::raw("SQL_CALC_FOUND_ROWS id")
    ])
    ->where("active", 1)
    ->limit(10)
    ->get();

$count = DB::select("SELECT FOUND_ROWS() as `row_count`")[0]->row_count;
© www.soinside.com 2019 - 2024. All rights reserved.