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 相关文章推荐
第1次亲密接触PHP5(1)
Oct 09 PHP
如何使用动态共享对象的模式来安装PHP
Oct 09 PHP
PHP的ASP防火墙
Oct 09 PHP
php字符串截取问题
Nov 28 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
php封装的smarty类完整实例
Oct 19 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 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&MYSQL分页原理及实现
2007/01/02 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
任意位置显示html菜单
2007/02/01 Javascript
兼容ie和firefox js关闭代码
2008/12/11 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
Angular路由ui-router配置详解
2018/08/01 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
python追加元素到列表的方法
2015/07/28 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
二胎满月酒致辞
2015/07/29 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书