手机
当前位置:查字典教程网 >编程开发 >php教程 >Thinkphp中Create方法深入探究
Thinkphp中Create方法深入探究
摘要:由于工作原因在thinkPHP的create()方法上遇到了问题,所以跟踪了create(),从而进一步探究了create()方法。原来cr...

由于工作原因在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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

【Thinkphp中Create方法深入探究】相关文章:

php比较相似字符串的方法

php中文本数据翻页(留言本翻页)

php中文件上传的安全问题

php注入实例

php中get_defined_constants函数用法实例分析

php.ini中文版

PHP中foreach()用法汇总

php中smarty区域循环的方法

php操作redis缓存方法分享

php数据库连接

精品推荐
分类导航