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 相关文章推荐
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
PHP 身份验证方面的函数
Oct 11 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
PHP小教程之实现双向链表
Jun 12 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 PHP
如何解决php-fpm启动不了问题
Nov 17 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实现批量上传单个文件
2015/12/29 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
限制文本框输入N个字符的js代码
2010/05/13 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
node.js中的require使用详解
2014/12/15 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
冬季安全检查方案
2014/05/23 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
2014年团支书工作总结
2014/11/14 职场文书
市级三好学生评语
2014/12/29 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python