Laravel Eloquent ORM 如何分段查询?

在用larave Eloquent ORM查询时,发现一个小小的坑,具体如下:

//根据条件获取user的模型实例
$query = User::where('status', 0);

//查询一个指定的用户  打印出sql语句:select * from `users` where `status` = ? and `id` = ? limit 1
$users = $query->where('id', 1)->first();

//再次时间前置的模型实例查询  发现打印出sql语句为select count(*) as aggregate from `users` where `status` = ? and `id` = ? and `id` = ? limit 1
ddd($query->where('id', 1)->count());

是的!第二次count查询的时候把第一次first查询的条件附加到count查询里,不知道这个问题是否有大神遇到过,如何解决?

如此.
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2

因为内部都只维护同一个$this->query肯定会重用的,解决方法就是克隆了

//根据条件获取user的模型实例
$query = User::where('status', 0);
$countQuery = clone $query;

$users = $query->where('id', 1)->first();

ddd($countQuery->where('id', 1)->count());

如果只是简单的获取总数,把没有条件的放在前面,然后再取有条件的。比如把$query->count()放前面,但如果取总数也有条件放哪都不管用,用克隆。

file

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!