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 相关文章推荐
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
PHP开发过程中常用函数收藏
Dec 14 PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
PHP中图片等比缩放的实例
Mar 24 PHP
php while循环得到循环次数
Oct 26 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
Sep 22 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python图像处理之镜像实现方法
2015/05/30 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
Python3并发写文件与Python对比
2019/11/20 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
恐龙的灭绝教学反思
2014/02/12 职场文书
国庆节演讲稿
2014/05/27 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
家庭贫困证明
2015/06/16 职场文书
欠条样本
2015/07/03 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL
python数字类型和占位符详情
2022/03/13 Python