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的网址
Nov 25 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
php DOS攻击实现代码(附如何防范)
May 29 PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
十个PHP高级应用技巧果断收藏
Sep 25 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
Zend Framework教程之Resource Autoloading用法实例
Mar 08 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 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中hashtable实现示例分享
2014/02/13 PHP
php实现的SESSION类
2014/12/02 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
PHP中的表达式简述
2016/05/29 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
python中assert用法实例分析
2015/04/30 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
回调函数的意义以及python实现实例
2017/06/20 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
2018/06/26 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
Python requests上传文件实现步骤
2020/09/15 Python
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
《记承天寺夜游》教学反思
2014/02/16 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang