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 相关文章推荐
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
php中用数组的方法设置cookies
Apr 21 PHP
基于php无限分类的深入理解
Jun 02 PHP
php+mysql实现无限级分类
Nov 11 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
php+ajax注册实时验证功能
Jul 20 PHP
PHP的Json中文处理解决方案
Sep 29 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
php原生数据库分页的代码实例
Feb 18 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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 地区分类排序算法
2013/07/01 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
在python中画正态分布图像的实例
2019/07/08 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
几道PHP的面试题
2012/05/19 面试题
本科毕业生应聘求职信
2014/07/06 职场文书
颐和园英文导游词
2015/01/30 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
《废话连篇——致新手》——chinapizza
2022/04/05 无线电