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企业级应用之常见缓存技术篇
Jan 27 PHP
PHP读取文件并可支持远程文件的代码分享
Oct 03 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PHP FileSystem 文件系统常用api整理总结
Jul 12 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 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(2)――PHP类型
2010/02/15 PHP
PHP echo()函数讲解
2019/02/15 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
详解JavaScript 的变量
2019/03/08 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
如何用Python绘制3D柱形图
2020/09/16 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
python安装sklearn模块的方法详解
2020/11/28 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
最新结婚典礼主持词
2014/03/14 职场文书
小学开学典礼主持词
2014/03/19 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
工作一年自我鉴定
2019/06/20 职场文书