1、(第(第48讲)讲) ThinkPHP ThinkPHP 小新闻系统及连贯操作小新闻系统及连贯操作学习目标学习目标 连贯操作定义 使用连贯操作1连贯操作的定义连贯操作的定义 ThinkPHP模型基础类提供的连贯操作方法,可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作。使用也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下: $User-where(status=1)-order(create_time)-limit(10)-select();这里的where、order和limit方法就被称之为连贯操作
2、方法,T除了select方法必须放到最后一个外(因为select方法并不是连贯操作方法),连贯操作T的方法调用顺序没有先后,例如,下面的代码和上面的等效: $User-order(create_time)-limit(10)-where(status=1)-select();(第(第48讲)讲) ThinkPHP ThinkPHP 小新闻系统及连贯操作小新闻系统及连贯操作1使用连贯操作使用连贯操作 TABLEtable 定义要操作的数据表名称,动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名和跨库操作 用法 table($table,$parse=null) 参数 ta
3、ble(必须):数据表名称,支持操作多个表,支持字符串、数组和对象parse(可选)预处理参数,详见14.3防止SQL注入 查询条件预处理 返回值 当前模型实例 备注 如果不调用table方法,会自动获取模型对应或者定义的数据表 用法示例:$Model-Table(think_user user)-where(status1)-select();也可以在table方法中跨库操作,例如:$Model-Table(db_name.think_user user)-where(status1)-select();Table方法的参数支持字符串和数组,数组方式的用法:$Model-Table(arra
4、y(think_user=user,think_group=group)-where(status1)-select();使用数组方式定义的优势是可以避免因为表名和关键字冲突而出错的情况。一般情况下,无需调用table方法,默认会自动获取当前模型对应或者定义的数据表。(第(第48讲)讲) ThinkPHP ThinkPHP 小新闻系统及连贯操作小新闻系统及连贯操作1使用连贯操作使用连贯操作 DATAdata 可以用于新增或者保存数据之前的数据对象赋值 用法 data($data) 参数 data(必须):数据,支持数组和对象 返回值 当前模型实例 备注 如果不调用data方法,则会取当前的数据
5、对象或者传入add和save的数据 使用示例:$Model-data($data)-add();$Model-data($data)-where(id=3)-save();Data方法的参数支持对象和数组,如果是对象会自动转换成数组。如果不定义data方法赋值,也可以使用create方法或者手动给数据对象赋值的方式。模型的data方法除了创建数据对象之外,还可以读取当前的数据对象,例如:$this-find(3);$data = $this-data();。(第(第48讲)讲) ThinkPHP ThinkPHP 小新闻系统及连贯操作小新闻系统及连贯操作1使用连贯操作使用连贯操作 FIELDf
6、ield 用于定义要查询的字段 用法 field($field,$except=false) 参数 field(必须):字段名,支持字符串和数组,支持指定字段别名;如果为true则表示显式或者数据表的所有字段。except(可选):是否排除,默认为false,如果为true表示定义的字段为数据表中排除field参数定义之外的所有字段。 返回值 当前模型实例 备注 如果不调用field方法,则默认返回所有字段,和field(*)等效 使用示例:$Model-field(id,nickname as name)-select();$Model-field(array(id,nickname=nam
7、e)-select();如果不调用field方法或者field方法传入参数为空的话,和使用field(*)是等效的。如果需要显式的传入所有的字段,可以使用下面的方法:$Model-field(true)-select();但是我们更建议只获取需要显式的字段名,或者采用字段排除方式来定义,例如:$Model-field(status,true)-select();表示获取除了status之外的所有字段。(第(第48讲)讲) ThinkPHP ThinkPHP 小新闻系统及连贯操作小新闻系统及连贯操作1使用连贯操作使用连贯操作 order 用于对操作结果排序 用法 order($order) 参数
8、 order(必须):排序的字段名,支持字符串和数组,支持多个字段排序 返回值 当前模型实例 备注 如果不调用order方法,按照数据库的默认规则 使用示例:order(id desc) 排序方法支持对多个字段的排序order(status desc,id asc)order方法的参数支持字符串和数组,数组的用法如下:order(array(status=desc,id)(第(第48讲)讲) ThinkPHP ThinkPHP 小新闻系统及连贯操作小新闻系统及连贯操作1使用连贯操作使用连贯操作 LIMITlimit 用于定义要查询的结果限制(支持所有的数据库类型) 用法 limit($limi
9、t) 参数 limit(必须):限制数量,支持字符串 返回值 当前模型实例 备注 如果不调用limit方法,则表示没有限制 备注 如果不调用limit方法,则表示没有限制我们知道不同的数据库类型的limit用法是不尽相同的,但是在ThinkPHP的用法里面始终是统一的方法,也就是limit(offset,length) ,无论是Mysql、SqlServer还是Oracle数据库,都是这样使用,系统的数据库驱动类会负责解决这个差异化。使用示例:limit(1,10)如果使用limit(10) 等效于 limit(0,10)3.1版本以后,limit方法增加第二个参数支持,例如:$this-limit(10,100)-select();和之前的用法$this-limit(10,100)-select();(第(第48讲)讲) ThinkPHP ThinkPHP 小新闻系统及连贯操作小新闻系统及连贯操作