ThinkPHP开发指南-模型之连贯操作
导航:上一页
ThinkPHP2.0版本全面启用模型类的连贯操作方法,可以有效的提高数据存取的代码清晰度和开发效率。使用方面也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下:
PHP代码
$User->where('status=1')->order('create_time')->limit(10)->select();
除了select方法必须放到最后一个外,其他的连贯操作的方法调用顺序没有先后,例如,下面的代码和上面的等效:
PHP代码
$User->order('create_time')->where('status=1')->limit(10)->select();
如果不习惯使用连贯操作的话,新版还支持直接使用参数进行查询的方式。例如上面的代码可以改写为: PHP代码
$User->select(array('order'=>'create_time', 'where'=>'status=1', 'limit'=>'10'));
使用数组参数方式的话,索引的名称就是连贯操作的方法名称。其实不仅仅是查询方法可以使用连贯操作,包括add、 save、delete等方法都可以使用,例如: PHP代码
$User->where('id=1')->field('id,name,email')->find(); $User->where('status=1 and id=1')->delete();
原则上说,所有的连贯操作都只有一个参数,并且连贯操作的参数仅在当此查询或者操作有效,完成后会自动清空连贯操作的所有传值,简而言之,连贯操作的结果不会带入以后的查询。下面总结下连贯操作的使用方法(更多的用法我们会在CURD操作的过程中详细描述):
Where方法:用于查询或者更新条件的定义.
Where方法的参数支持字符串、数组和对象。详细的使用请参考后面的查询语言部分。
Table方法:定义要操作的数据表名称
可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如:
PHP代码
$Model->Table('think_user user')->where('status>1')->select();
Table方法的参数支持字符串和数组,数组方式的用法:
PHP代码
$Model->Table(array('think_user'=>'user','think_group'=>'group'))->where('status>1')->select();
使用数组方式定义的优势是可以避免因为表名和关键字冲突而出错的情况。如果不定义table方法,默认会自动获取当前模型对应或者定义的数据表。
Data方法:数据对象赋值
可以用于新增或者保存数据之前的数据对象赋值,例如:
PHP代码
$Model->data($data)->add(); $Model->data($data)->where('id=3')->save();
Data方法的参数支持对象和数组,如果是对象会自动转换成数组。如果不定义data方法赋值,也可以使用create方法或者手动给数据对象赋值的方式。
Field方法:定义要查询的字段
Field方法的参数支持字符串和数组,例如,
PHP代码
$Model->field('id,nickname as name')->select(); $Model->field(array('id','nickname'=>'name'))->select();
如果不使用field方法指定字段的话,默认和使用field('*')等效。
Order方法:结果排序 . 例如:
PHP代码
order('id desc')
排序方法支持对多个字段的排序
PHP代码
order('status desc,id asc')
order方法的参数支持字符串和数组,数组的用法如下:
PHP代码
order(array('status'=>'desc','id'))
Limit方法:结果限制
我们知道不同的数据库类型的limit用法是不尽相同的,但是在ThinkPHP的用法里面始终是统一的方法,也就是limit('offset,length') ,无论是Mysql、SqlServer还是Oracle数据库,都是这样使用,系统的数据库驱动类会负责解决这个差异化。
例如:
PHP代码
limit('1,10')
如果使用limit('10') 等效于 limit('0,10')
Page方法:查询分页
Page操作方法是新增的特性,可以更加快速的进行分页查询。Page方法的用法和limit方法类似,格式为:
PHP代码
Page('page[,listRows]')