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 相关文章推荐
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php支付宝接口用法分析
Jan 04 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
Dec 18 PHP
PHP使用Redis长连接的方法详解
Feb 12 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
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
两个Javascript小tip资料
2010/11/23 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
浅谈javascript的调试
2015/01/28 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
原生JS实现天气预报
2020/06/16 Javascript
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
django 环境变量配置过程详解
2019/08/06 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
2014/03/31 HTML / CSS
.NET remoting的两种通道是什么
2016/05/31 面试题
2014年医院工作总结
2014/11/20 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
英语导游欢迎词
2015/09/30 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server