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中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
实用的简单PHP分页集合包括使用方法
Oct 21 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
PHP会话控制:Session与Cookie详解
Sep 27 PHP
PHP中预定义的6种接口介绍
May 12 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
Feb 03 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
YII框架中搜索分页jQuery写法详解
Dec 19 PHP
php获取'/'传参的值简单方法
Jul 13 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
js闭包实例汇总
2014/11/09 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
python 多线程实现检测服务器在线情况
2015/11/25 Python
python 计算文件的md5值实例
2017/01/13 Python
python 对key为时间的dict排序方法
2018/10/17 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python 循环数据赋值实例
2019/12/02 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
金属材料工程个人求职的自我评价
2013/12/04 职场文书
学校七一活动方案
2014/01/19 职场文书
购房协议书
2014/04/11 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript