现在有如下数据:

1 $user=array(
2     0=>array('id'=>1,'name'=>'张三'),
3     0=>array('id'=>2,'name'=>'李四'),
4 );

现在如果需将这两条数据批量插入到数据表的话,一般大家都会想到用foreach,然后调用 insert 或者 save 方法插入数据。但实际操作却是在foreach循环操作中,insert 只会插入第一条数据,save 却只会插入第二条数据。这是为什么呢?解释如下:

插入一行到基于这个ActiveRecord的属性表。如果表的主键是自动增量和插入前为null,将插入后的实际值填充。注意,验证不执行此方法。你可以调用validate执行验证。记录成功插入到数据库后,它的isNewRecord属性将设置为false,和它的scenario属性将设置为 update。

既然如此,那么除了使用事务该如何实现数据的批量插入呢?经试验总结了如下两种方法:

第一种方法

1 $model=new User();
2 foreach($data as $attributes){
3      $_model=clone $model;
4      $_model->setAttributes($attributes);
5      $_model->save();
6 }

第二种方法

1 $model=new User();
2 foreach($data as $attributes){
3       $model->isNewRecord=true;
4       $model->setAttributes($attributes);
5       $model->save()&&$model->id=0;
6 }

最新文章

  1. 当MyEclipse突然异常关闭
  2. Local gulp not found in.. on windows
  3. 从 IClassFactory 为 CLSID 为 {00024500-0000-0000-C000-000000000046} 的 COM 组件创建实例失败,原因是出现以下错误: 8001010a解决办法
  4. CentOS 6.5中linux grub修复
  5. github如何pull最新代码
  6. 移动支付之智能IC卡与Android手机进行NFC通信
  7. Cordova CLI源码分析(一)——简介
  8. net开发过程中Bin目录net开发过程中Bin目录下面几种文件
  9. 编译安装httpd 2.4
  10. B-dya6
  11. vmware克隆虚拟机后进行网络配置
  12. C#;DataTable添加列;DataTable转List泛型集合;List泛型集合转DataTable泛型集合;
  13. JDK版本更换,Eclipse中所有的项目报错
  14. Mac使用数据线连接ios,安装deb
  15. @RequestBody jackson解析复杂的传入值的一个坑;jackson解析迭代数组;jackson多重数组;jakson数组
  16. Tomcat的overview界面浅析
  17. springboot整合jedisCluster
  18. Python 插件安装
  19. js setTimeout 和 setInterval 区别
  20. Apache优化提高并发数量

热门文章

  1. 基于matlab的蓝色车牌定位与识别---分割
  2. B. Anatoly and Cockroaches
  3. NOIp2017囤题计划
  4. Qt概念和快捷键
  5. Divisibility by 25 CodeForces - 988E
  6. Leetcode 559. N叉树的最大深度
  7. javascript 内置日期转换方法
  8. 【LeetCode】Binary Tree Postorder Traversal(二叉树的后序遍历)
  9. 机器学习实战之AdaBoost算法
  10. kb-07专题线段树-04--离散化;