勾股OA在线文档

limit 与 page

limit

limit方法主要用于指定查询和操作的数量。可以兼容所有的数据库驱动类。

1、限制结果数量
例如获取满足要求的10个用户,如下调用即可:

Db::name('Admin')->where('status',1)->field('id,name')->limit(10)->select();

limit方法也可以用于写操作,例如更新满足要求的3条数据:

Db::name('Admin')->where('score',100)->limit(3)->update(['level'=>'A']);

如果用于insertAll方法的话,则可以分批多次写入,每次最多写入limit方法指定的数量。

Db::name('Admin')->limit(100)->insertAll($userList);

2、分页查询
用于文章分页查询是limit方法比较常用的场合,例如:

Db::name('Admin')->limit(10,25)->select();

表示查询文章数据,从第10行开始的25条数据(可能还取决于where条件和order排序的影响)。对于大数据表,尽量使用limit限制查询结果,否则会导致很大的内存开销和性能问题。


page

page方法主要用于分页查询。
在前面已经了解了关于limit方法用于分页查询的情况,而page方法则是更人性化的进行分页查询的方法,例如还是以文章列表分页为例来说,如果使用limit方法,我们要查询第一页和第二页(假设我们每页输出10条数据)写法如下:

// 查询第一页数据
Db::name('Admin')->limit(0,10)->select();
// 查询第二页数据
Db::name('Admin')->limit(10,10)->select();

虽然利用扩展类库中的分页类Page可以自动计算出每个分页的limit参数,但是如果要自己写就比较费力了,如果用page方法来写则简单多了,例如:

// 查询第一页数据
Db::name('Admin')->page(1,10)->select();
// 查询第二页数据
Db::name('Admin')->page(2,10)->select();

显而易见的是,使用page方法你不需要计算每个分页数据的起始位置,page方法内部会自动计算。
page方法还可以和limit方法配合使用,例如:

Db::name('Admin')->limit(25)->page(3)->select();

page方法只有一个值传入的时候,表示第几页,而limit方法则用于设置每页显示的数量,也就是说上面的写法等同于:

Db::name('Admin')->page(3,25)->select();