ThinkPHP 鲜为人知的 selectAdd 方法 addAll( select() )
来源:互联网 发布:辽宁省国税发票软件 编辑:程序博客网 时间:2024/06/05 02:44
TP算是国内相当热门的一个PHP框架,相信大家对TP的普通增删查改所用的select(),add(),save(),delect(),find(),getField()等等内置函数早已烂熟于心了。
今天,就向大家介绍一种TP手册中未提及,但却一直存在于源码当中的 SelectAdd()方法(3.1,3.2均支持)。这是本人在阅读TP源码的时候的偶然发现,前几天刚好碰到一个用得着的业务逻辑,便尝试使用了一下这个方法。
selectAdd()方法源码在TP 的Model.class.php下:
/** * 通过Select方式添加记录 * @access public * @param string $fields 要插入的数据表字段名 * @param string $table 要插入的数据表名 * @param array $options 表达式 * @return boolean */ public function selectAdd($fields='',$table='',$options=array()) { // 分析表达式 $options = $this->_parseOptions($options); // 写入数据到数据库 if(false === $result = $this->db->selectInsert($fields?$fields:$options['field'],$table?$table:$this->getTableName(),$options)){ // 数据库插入操作失败 $this->error = L('_OPERATION_WRONG_'); return false; }else { // 插入成功 return $result; } }
其功能相当于TP内 addAll(select()) 方法的组合。
select()方法大家已经很熟悉了,这里说明一下addAll()方法。
addAll()即批量插入。
$data=>Array( [0]=>Array( 'id'=>1, 'name'=>'张三' ), [1]=>Array( 'id'=>2, 'name'=>'李四' ), [2]=>Array( 'id'=>3, 'name'=>'王五' ) ...);M()->table('users')->data($data)->addAll(); //批量插入(支持二维数组)生成的sql语句是:INSERT INTO `users` (`id`, `name`) VALUES ('1', '张三'),('2', '李四'),('3', '王五')...;那么addAll( select() ) 显然便是将select查询出的数据批量插入到数据表中,而selectAdd()便直接能达到这个功能。
例如:数据库中数据如下表(class),现要将下表数据复制到新表(part)中并改变其parentid,则可使用selectAdd()方法
id name parentid
M('class')->where('parentid=2')->field('id,name,5')->selectAdd('id,name,parentid','part');对应生成的sql为:INSERT INTO `part` (`id`, `name`,`parentid`) (Select `id`,`name`,`5` from `class` where parentid=2);
阅读全文
0 0
- ThinkPHP 鲜为人知的 selectAdd 方法 addAll( select() )
- ThinkPHP 鲜为人知的 selectAdd 方法 addAll( select() )
- 关于ThinkPHP框架addAll()方法的设计问题填坑
- 关于list的addAll方法
- 关于THINKPHP的addAll支持的最大数据量
- List的【addAll(List list)】方法
- ArrayList的addAll方法使用注意
- Set接口的add,addAll,retainAll方法
- list的addAll方法是浅拷贝
- 集合的addAll与retainAll方法
- TextView 那些鲜为人知的方法
- Android 一些鲜为人知的方法
- thinkphp find() 方法和 select()的小区别
- thinkphp 使用M()->select()方法的返回值
- 关于List的add方法与addAll方法的区别
- List的add方法与addAll方法的区别
- List的add方法与addAll方法的区别
- 关于List的add方法与addAll方法的区别
- MySQL 5.6.27升级MySQL 5.7.18版本的升级步骤介绍
- Android TabLayout的简单使用
- 位运算
- Python基本数据类型
- CCF—最大的矩形 20131203
- ThinkPHP 鲜为人知的 selectAdd 方法 addAll( select() )
- 数据库触发器
- intellij IDEA右键没有Git或svn处理方法
- mysql 数据库的基本操作
- 查询查询所有servlet
- 第3周项目2 建设“顺序表”算法库
- WEB开发环境搭建之TomcatWeb服务器
- 4Sum--LeetCode
- poj 2236 Wireless Network(并查集)(有点暴力)