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作为Shell脚本语言使用
Oct 09 PHP
用php和MySql来与ODBC数据连接
Oct 09 PHP
PHP入门速成教程
Mar 19 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
ThinkPHP的Widget扩展实例
Jun 19 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
基于PHP实现的事件机制实例分析
Jun 18 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
Mar 18 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
深入PHP FTP类的详解
2013/06/13 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
jquery isType() 类型判断代码
2011/02/14 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
python 获取本机ip地址的两个方法
2013/02/25 Python
Python3基础之基本运算符概述
2014/08/13 Python
处理Python中的URLError异常的方法
2015/04/30 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
python制作朋友圈九宫格图片
2019/11/03 Python
浅析python函数式编程
2020/09/26 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
东方电视购物:东方CJ
2016/10/12 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
编写strcpy函数
2014/06/24 面试题
不错的求职信范文
2014/07/20 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
党员自评材料范文
2014/12/17 职场文书
学生会辞职信
2015/03/02 职场文书
计算机实训心得体会
2016/01/14 职场文书
iPhone13再次曝光
2021/04/15 数码科技