ThinkPHP中数据库CRUD操作方法盘点(limit、page、table、order、data方法)
来源:互联网 发布:前端页面性能优化 编辑:程序博客网 时间:2024/05/22 13:55
limit方法
limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多。ThinkPHP的limit方法可以兼容所有的数据库驱动类的。
用法
限制结果数量
例如获取满足要求的10个用户,如下调用即可:
$User = M('User');$User->where('status=1')->field('id,name')->limit(10)->select();
limit方法也可以用于写操作,例如更新满足要求的3条数据:
$User = M('User');$User->where('score=100')->limit(3)->save(array('level'=>'A'));
分页查询
用于文章分页查询是limit方法比较常用的场合,例如:
$Article = M('Article');$Article->limit('10,25')->select();
表示查询文章数据,从第10行开始的25条数据(可能还取决于where条件和order排序的影响 这个暂且不提)。
在3.1版本后,你也可以这样使用:
$Article = M('Article');$Article->limit(10,25)->select();
对于大数据表,尽量使用limit限制查询结果,否则会导致很大的内存开销和性能问题。
page方法
page方法也是模型的连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法。
用法
我们在前面已经了解了关于limit方法用于分页查询的情况,而page方法则是更人性化的进行分页查询的方法,例如还是以文章列表分页为例来说,如果使用limit方法,我们要查询第一页和第二页(假设我们每页输出10条数据)写法如下:
$Article = M('Article');$Article->limit('0,10')->select(); // 查询第一页数据$Article->limit('10,10')->select(); // 查询第二页数据
虽然利用扩展类库中的分页类Page可以自动计算出每个分页的limit参数,但是如果要自己写就比较费力了,如果用page方法来写则简单多了,例如:
$Article = M('Article');$Article->page('1,10')->select(); // 查询第一页数据$Article->page('2,10')->select(); // 查询第二页数据
显而易见的是,使用page方法你不需要计算每个分页数据的起始位置,page方法内部会自动计算。
3.1版本以后,page方法也支持2个参数的写法,例如:
$Article->page(1,10)->select();
和
$Article->page('1,10')->select();
等效。
page方法还可以和limit方法配合使用,例如:
$Article->limit(25)->page(3)->select();
当page方法只有一个值传入的时候,表示第几页,而limit方法则用于设置每页显示的数量,也就是说上面的写法等同于:
$Article->page('3,25')->select();
table方法
table方法也属于模型类的连贯操作方法之一,主要用于指定操作的数据表。
用法
一般情况下,操作模型的时候系统能够自动识别当前对应的数据表,所以,使用table方法的情况通常是为了:
切换操作的数据表;
对多表进行操作;
例如:
$Model->table('think_user')->where('status>1')->select();
也可以在table方法中指定数据库,例如:
$Model->table('db_name.think_user')->where('status>1')->select();
需要注意的是table方法不会改变数据库的连接,所以你要确保当前连接的用户有权限操作相应的数据库和数据表。
切换数据表后,系统会自动重新获取切换后的数据表的字段缓存信息。
如果需要对多表进行操作,可以这样使用:
$Model->field('user.name,role.title')->table('think_user user,think_role role')->limit(10)->select();
为了尽量避免和mysql的关键字冲突,可以建议使用数组方式定义,例如:
$Model->field('user.name,role.title')->table(array('think_user'=>'user','think_role'=>'role'))->limit(10)->select();
order方法
order方法属于模型的连贯操作方法之一,用于对操作的结果排序。
用法
$Model->where('status=1')->order('id desc')->limit(5)->select();
注意:连贯操作方法没有顺序,可以在select方法调用之前随便改变调用顺序。
支持对多个字段的排序,例如:
$Model->where('status=1')->order('id desc,status')->limit(5)->select();
如果没有指定desc或者asc排序规则的话,默认为asc。
如果你的字段和mysql关键字有冲突,那么建议采用数组方式调用,例如:
$Model->where('status=1')->order(array('order','id'=>'desc'))->limit(5)->select();
data方法
data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值,可能大家不太习惯用这个方法,今天来讲解下如何用好data方法。
用法
写操作
通常情况下我们都是通过create方法或者赋值的方式生成数据对象,然后写入数据库,例如:
$Model = D('User');$Model->create(); // 这里略过具体的自动生成和验证判断$Model->add();
又或者直接对数据对象赋值,例如:
$Model = M('User');$Model->name = '流年';$Model->email = 'thinkphp@qq.com';$Model->add();
那么data方法则是直接生成要操作的数据对象,例如:
$Model = M('User');$data['name'] = '流年';$data['email'] = 'thinkphp@qq.com';$Model->data($data)->add();
注意:如果我们同时使用create方法和data创建数据对象的话,则后调用的方法有效。
data方法支持数组、对象和字符串,对象方式如下:
$Model = M('User');$obj = new stdClass;$obj->name = '流年';$obj->email = 'thinkphp@qq.com';$Model->data($obj)->add();
字符串方式用法如下:
$Model = M('User');$data = 'name=流年&email=thinkphp@qq.com';$Model->data($data)->add();
也可以直接在add方法中传入数据对象来新增数据,例如:
$Model = M('User');$data['name'] = '流年';$data['email'] = 'thinkphp@qq.com';$Model->add($data);
但是这种方式data参数只能使用数组。
当然data方法也可以用于更新数据,例如:
$Model = M('User');$data['id'] = 8;$data['name'] = '流年';$data['email'] = 'thinkphp@qq.com';$Model->data($data)->save();
当然我们也可以直接这样用:
$Model = M('User');$data['id'] = 8;$data['name'] = '流年';$data['email'] = 'thinkphp@qq.com';$Model->save($data);
同样,此时data参数只能传入数组。
在调用save方法更新数据的时候 会自动判断当前的数据对象里面是否有主键值存在,如果有的话会自动作为更新条件。也就是说,下面的用法和上面等效:
$Model = M('User');$data['name'] = '流年';$data['email'] = 'thinkphp@qq.com';$Model->data($data)->where('id=8')->save();
读操作
除了写操作外,data方法还可以用于读取当前的数据对象,例如:
$User = M('User');$map['name'] = '流年';$User->where($map)->find(); // 读取当前数据对象$data = $User->data();
本文章转自:ThinkPHP官方文档
- ThinkPHP中数据库CRUD操作方法盘点(limit、page、table、order、data方法)
- ThinkPHP中数据库CRUD操作方法盘点(field方法)
- ThinkPHP中数据库CRUD操作方法盘点(where方法)
- ThinkPHP的连贯操作方法中field方法
- ThinkPHP中order()方法的使用
- Thinkphp M order方法
- 【ThinkPHP学习】数据库CRUD操作
- ThinkPHP对数据库的CRUD
- ThinkPHP中data()方法的使用
- CURD方法盘点:table方法
- thinkphp之数据库更新操作方法save
- THINKPHP 中关联查询(多表查询)可以使用 table() 方法或和join方法
- mysql 数据库中 WHERE / ORDER BY/GROUP BY/LIMIT 几个限制条件的排序
- ThinkPHP的连贯操作方法中field方法有很多的使用技巧
- ThinkPHP CRUD
- thinkphp CRUD
- magento中使用group,order by,limit
- sql语句中limit和order by
- 按钮控制div大小
- php Redis存储Session
- Tomcat7单机多实例部署(windows版)
- hdu acm 1863 畅通工程
- 跟着猫哥学Golang[5] - 循环
- ThinkPHP中数据库CRUD操作方法盘点(limit、page、table、order、data方法)
- 8.条件和循环
- GRUB2引导修复
- ubuntu-包管理工具
- 关于Java运算保留小数点总结
- MATLAB中uigetfile函数使用方法
- (NO.00002)iOS游戏精灵战争雏形(二)
- matlab区域增长法分割图像例子
- js代码报错:Uncaught ReferenceError: checkBox is not defined