请问 SQL 分页查询时如何共用查询条件?

手动分页查询时需要先查询总数 count 然后再 offset limit 查一次,但是他们的 where 条件都一样,如何只写一次 where 条件呢?

例如:

$count = User::where('name', 'lisi')->count();

$users = User::where('name', 'lisi')->offset(0)->limit(10)->get();

这里 where('name', 'lisi') 写了两次,请问有什么方法可以只写一次,两条 SQL 共用吗?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

$query = User::where('name', 'lisi');
$count = $query->count();
$users = $query->offset(0)->limit(10)->get();

3年前 评论
讨论数量: 5

$query = User::where('name', 'lisi');
$count = $query->count();
$users = $query->offset(0)->limit(10)->get();

3年前 评论

$query = User::where('name', 'lisi');
$count = $query->count();
$users = $query->offset(0)->limit(10)->get();

3年前 评论

$user = new user(); $user = $user->where('name', 'lisi'); $count = $user->count(); $count = $user->->offset(0)->limit(10)->get();

3年前 评论
$builder = User::where('name', 'lisi');
$count = $builder->clone()->count();
// 等价: $count = (clone $builder)->count();

$users = $builder->offset(0)->limit(10)->get();

我贴的这个 clone 是没必要的,楼上的就可以解决了,
因为 count() 并不会改变 对象 属性。

如果把两个查询换下位置,才需要。

之前犯的对象属性改变

3年前 评论
User::where('name', 'lisi')->paginate(10)
3年前 评论

想分页用paginate不就行了

3年前 评论

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