总结ThinkPHP使用技巧经验分享(三)
add方法返回主键(id)的值
在往数据表中添加数据时调用add方法,默认返回值就是刚添加的id值,就不用再去查询了.
save方法返回值的判断
在修改数据时,如果修改成功返回的是被修改的记录数0,1,2,3......
注意:以下几种情况返回 false,所以判断更新失败应使用 if(false === $this->save())
(1)更新的数据为空
(2)_before_update()方法返回false
(3)没有任何更新条件(没有定义where()里的条件,或者保存的数据里没有主键的值)
查询后置方法详解
如_after_select,_after_insert,_after_update,_after_delete,_after_find等
巧妙地利用这些方法可以简化开发
用_after_select(&$result,$options)举例:
参数:$result,这是select出的结果数组。注意这里是一个引用传参,也就是说我们可以直接改变传递过来的值而不需要返回
$options,这是查询的条件,也就是where()里面的条件
假如你查询出的数据有time这一字段,并且是以int型保存的,那么可以在这个方法里进行时间格式化的操作
- protected function _after_select(&$result,$options)
- foreach($result as $key=>$value){
- $result[$key]['time'] = date('Y-m-d H:i:s', $value['time']);
- }
- }
这样就不需要每次在模板上显示的时候,再用函数来处理了
同样地,可以用_after_insert来代替关联操作,在新增完一条数据后再根据参数更新一些关联的数据
当然,除了后置方法,还有前置方法。可以用来代替一些复杂的数据验证或者进行数据的预处理,类似于自动完成和自动验证
- protected function _before_insert(&$data,$options) {
- //对新增前的数据进行处理
- foreach ($data as $key=>$value){
- $value['status'] = 1;//类似于自动完成
- if($value['age'] > 100){//类似于自动验证
- return false;
- }
- }
- }
最后,有几点需要注意的:1,这些方法都是必须写在model里面的
2,这些方法所接收的参数,有些是引用传参,有些是传值,得注意区分。具体可参考手册
3,在后置方法里不需要返回值。而前置方法里可以返回 false 来阻止进行下一步的操作
打印sql语句
$User = D('User');
$User->select();
echo $User->getLastSql();或者echo $User->_sql();
获取最后执行的sql语句,方便查看调试
跨模板主题调用模板
假如Tpl下有new主题,该主题下有User文件夹,文件夹下有index.html
你当前的模板主题是Tpl下的default,那么可以用$this->display('new:User:index');
或者用全路径输出$this->display('./Tpl/new/User/index.html');
路由规则^符号的使用
这个符号在手册中没有提及,但是作用却不可忽视。
用法:'user/^getlist|tag' => 'user/index'
作用:在user模块中,除了getlist和tag方法,其他存在的方法全部指向index方法。参数之间用|间隔
这样可以屏蔽一些不想让用户访问到但是又必须定义成public的方法
总结ThinkPHP使用技巧经验分享(三)的更多相关文章
- thinkphp开发技巧经验分享
thinkphp开发技巧经验分享 www.111cn.net 编辑:flyfox 来源:转载 这里我给大家总结一个朋友学习thinkphp时的一些笔记了,从变量到内置模板引擎及系统变量等等的笔记了,同 ...
- 总结ThinkPHP使用技巧经验分享(二)
循环输出volist 还有别名 iterate 模版赋值:$User = D('User')$list = $User->findAll()$this->assign('list',$li ...
- 总结ThinkPHP使用技巧经验分享(一)
约定:1.所有类库文件必须使用.class.php作为文件后缀,并且类名和文件名保持一致2.控制器的类名以Action为后 缀3.模型的类名以Model为后缀,类名第一个字母须大写4.数据库表名全部采 ...
- 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享三:问题2
框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 搜索框是该项目重要的一环,由于涉及 ...
- ThinkPHP使用技巧经验总结
add方法返回主键(id)的值 在往数据表中添加数据时调用add方法,默认返回值就是刚添加的id值,就不用再去查询了. save方法返回值的判断 在修改数据时,如果修改成功返回的是1,不成功则是0,如 ...
- MySQL 性能优化的最佳20多条经验分享(三)(转)
16. 垂直分割 "垂直分割"是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的.(以前,在银行做过项目,见过一张表有100多个字段, ...
- 我的秋招经验分享(已拿BAT头条网易滴滴)
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- 好文推荐:转载一篇别人kaggle的经验分享
转载:https://www.toutiao.com/i6435866304363627010/ 笔者参加了由Quora举办的Quora Question Pairs比赛,并且获得了前1%的成绩.这是 ...
- 使用latex撰写博士,硕士学位论文(浙大博士经验分享)
使用latex撰写博士,硕士学位论文(浙大博士经验分享) 浙大博士: 个人感觉,还是要用latex来写.因为之前发过几篇word排版的中文论文,在参考文献的引用.文字格式调整上,实在是难受.如果坚持 ...
随机推荐
- 首师大附中互测题:99999999海岛帝国后传:算法大会【D001】
[D001]99999999海岛帝国后传:算法大会[难度:D] ———————————————————————————————————————————————————————————————————— ...
- iOS 启动画面 代码自定义
先来看一个可能会遇到的问题: 如果你已经删除了xcode为你的项目自动生成的LaunchScreen.storyboard, 然后你在测试你的app的时候发现,屏幕里出现了黑色的区域,如上图(画红线的 ...
- 清华学堂 列车调度(Train)
列车调度(Train) Description Figure 1 shows the structure of a station for train dispatching. Figure 1 In ...
- 【Oracle】去除表中重复的数据
删除表重复数据 (t1表中有重复数据)1.使用distinct create table t2 as select * from t1;create table tmp_t2 as select di ...
- Ext3文件系统mount选项和文件属性介绍
mount选项 设置方式 ext3 mount选项可以通过多个方式进行设置:1)内核编译时: 内核menuconfig通过CONFIG_EXT3_DEFAULTS_TO_ORDERED编译控制选项,来 ...
- js 闭包之一
既然说闭包的化,我们就先来说说函数.慢慢的进入进入正题 (1)函数申明 f1(); function f1(){ alert(") }//结果 1 (2)函数定义 f1();var f1=f ...
- Node.js exports与module.exports的关系
今天搜索module.exports时看到CNode社区上发的Hack Sparrow一篇相关文章的链接 Node.js Module – exports vs module.exports 一篇5年 ...
- Sqlserver查询结果,让某列结果合并一列并且逗号分隔。
create function [dbo].[mergeName](@Id bigint) returns nvarchar(500) as begin dec ...
- bootstrap css总结
base css 我分为了几大类 1,列表 .unstyled(无样式列表),.dl-horizontal(dl列表水平排列) 2,代码 code(行级),pre(块级),.pre-scrollabl ...
- C#转摘
尽量用Func和lambda解决函数变量问题,用var, dynamic来解决动态变量问题