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 foreach循环使用详解与实例代码
May 08 PHP
Views rows style模板重写代码
May 16 PHP
PHP中集成PayPal标准支付的实现方法分享
Feb 06 PHP
PHP flush()与ob_flush()的区别详解
Jun 03 PHP
PHP获取当前页面完整URL的实现代码
Jun 10 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
Symfony2学习笔记之模板用法详解
Mar 17 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
laravel 获取当前url的别名方法
Oct 11 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
xajax写的留言本
2006/11/25 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
使用graphics.py实现2048小游戏
2015/03/10 Python
python根据日期返回星期几的方法
2015/07/06 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
销售副总经理岗位职责
2013/12/11 职场文书
幼儿园实习自我鉴定
2013/12/15 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
大学生求职信范文
2014/05/24 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
高效课堂教学反思
2016/02/24 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
Redis命令处理过程源码解析
2022/02/12 Redis
Java 数据结构七大排序使用分析
2022/04/02 Java/Android