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 相关文章推荐
7个超级实用的PHP代码片段
Jul 11 PHP
php设置编码格式的方法
Mar 05 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
Jan 17 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
May 31 PHP
浅谈php处理后端&接口访问超时的解决方法
Oct 29 PHP
实例讲解PHP页面静态化
Feb 05 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
PHP 7.4中使用预加载的方法详解
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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php上传、管理照片示例
2006/10/09 PHP
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
酒吧总经理岗位职责
2013/12/10 职场文书
运动会800米加油稿
2014/02/22 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
体育运动会广播稿
2014/10/05 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
单位综合评价意见
2015/06/05 职场文书
关于空气污染危害的感想
2015/08/11 职场文书