Thinkphp中Create方法深入探究


Posted in PHP onJune 16, 2014

由于工作原因在thinkPHP的create()方法上遇到了问题,所以跟踪了create(),从而进一步探究了create()方法。
原来create()方法原来有两个参数第一个参数就是众所周知的数据参数第二个是隐藏的$type参数,那么这个参数用来控制什么的呢?
// 状态$type = $type?$type!empty($data[$this->getPk()])?self::MODEL_UPDATE:self::MODEL_INSERT);
仔细琢磨了这句话才发现,这个隐藏参数是用来指明本次数据库具体是什么操作的,1即为插入操作,0即为更新操作
默认的情况下是不用给这个参数赋值的,原因是,系统能自动识别

它是这么识别的:

如果您传入的数据中有与主键相同字段的,则本次数据库操作则默认为更新操作,这么判断主要是因为大部分情况主键都是默认自增的,插入操作一般不会给主键赋值,但问题就出在这里

最近做的项目直接把学号作为主键,而学号不能使用自增而是有固定格式的,必须录入,
但是系统就自动把我的录入操作当成了更新操作,而我的自动完成代码都是这么写的:

protected $_auto = array(

        array('majorid','maxmajoridadd1',1,'callback'),

    );

第三个参数1查看手册就知道是指这个自动完成操作是在插入时候执行的。
而系统把我的插入操作当成了更新操作,我设置的自动完成代码自然就失效而不被执行了

当出现了你也要录入主键字段值的情况的时候您可以这么写

create($_POST,1)

直接告诉create方法此次操作是插入操作

这是非常难以发现的问题,最近发现好多人遇到此问题,特此撰文说明。

此外自动验证/自动完成功能失效还有可能是你的Model类名称写错了之类的,我就犯过这种错误,多个字母少个字母经常的事情

基本上自动验证/自动完成失效就这两种情况

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP初学者头疼问题总结
Oct 09 PHP
如何在PHP中使用Oracle数据库(6)
Oct 09 PHP
一个php导出oracle库的php代码
Apr 20 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
php调用新浪短链接API的方法
Nov 08 PHP
CI框架中site_url()和base_url()的区别
Jan 07 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
ThinkPHP中的关联模型注意点
Jun 16 #PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 #PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 #PHP
浅析PHP的静态成员函数效率更高的原因
Jun 13 #PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 #PHP
PHPAnalysis中文分词类详解
Jun 13 #PHP
ThinkPHP缓存方法S()概述
Jun 13 #PHP
You might like
PHP运行环境配置与开发环境的配置(图文教程)
2013/06/04 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
php文件缓存方法总结
2016/03/16 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
Python处理CSV与List的转换方法
2018/04/19 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
全球性的在线商店:Vogca
2019/05/10 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
大家检讨书5000字
2014/02/03 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
会计求职信
2014/05/29 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python