Thinkphp中Create方法深入探究
2015-01-24信息快讯网
由于工作原因在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类名称写错了之类的,我就犯过这种错误,多个字母少个字母经常的事情
基本上自动验证/自动完成失效就这两种情况
php中file_get_contents与curl性能比较分析
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
php采用file_get_contents代替使用curl实例
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
PHP has encountered a Stack overflow问题解决方法
自编函数解决pathinfo()函数处理中文问题
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
php+MySQL判断update语句是否执行成功的方法
ThinkPHP中的create方法与自动令牌验证实例教程
php的SimpleXML方法读写XML接口文件实例解析
ThinkPHP中的关联模型注意点
浅析ThinkPHP中execute和query方法的区别
PHP中使用gettext解决国际化问题的例子(i18n)
php smarty truncate UTF8乱码问题解决办法
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
CodeIgniter框架过滤HTML危险代码
Codeigniter中禁止A Database Error Occurred错误提示的方法
PHP微框架Dispatch简介
PHP捕获Fatal error错误的方法
利用谷歌 Translate API制作自己的翻译脚本
PHP中date与gmdate的区别及默认时区设置
yii框架builder、update、delete使用方法
php将字符串转化成date存入数据库的两种方式
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Uncaught exception com_exception with message Failed to create COM object