请问 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 共用吗?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

1周前 评论
讨论数量: 5

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

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

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

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

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

之前犯的对象属性改变

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

想分页用paginate不就行了

1周前 评论

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

1周前 评论

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