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的session cookie错误
Aug 09 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
php使用codebase生成随机数
Mar 25 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 PHP
基于laravel Request的所有方法详解
Sep 29 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
用PHP实现WEB动态网页静态
2006/10/09 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
php车辆违章查询数据示例
2016/10/14 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
基于python实现百度翻译功能
2019/05/09 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
安全资料员岗位职责
2013/12/14 职场文书
小学运动会表扬稿
2014/01/19 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python