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 相关文章推荐
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
使用PHP遍历文件夹与子目录的函数代码
Sep 26 PHP
php curl_init函数用法
Jan 31 PHP
ThinkPHP3.1.3版本新特性概述
Jun 19 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
php简单的上传类分享
May 15 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
PHP屏蔽关键字实现方法
Nov 17 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
PHP中localeconv()函数的用法
Mar 26 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
创建无限极分类树型结构的简单方法
2017/06/20 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
tensorflow 查看梯度方式
2020/02/04 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
python中怎么表示空值
2020/06/19 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
保护环境标语
2014/06/09 职场文书
介绍长城的导游词
2015/01/30 职场文书
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android