thinkphp5 模型批量增加数据小记
楼主最近在学习thinkphp5,真的没应广大使用教程所说:你最好就是没学过thinkphp3.2。要不然苦恼重重。
因为想将一些功能实现一次,故自己写了一个文件上传类。
可以实现单文件,多文件上传(文件或者图片)。
鉴于thinkphp 5的写法,看文档是新增用$model->save()方法。如果是批量增加的话,就有两种做法:
做法一:$model->saveAll($data);
做法二:$model->isUpdate(false)->save();//循环
官方是这样给出的。
原型:
1 //单条数据
2 //method 1
3 $user = new User;
4 $user->name = 'thinkphp';
5 $user->email = 'thinkphp@qq.com';
6 $user->save();
7
8 //method 2
9 // 使用model助手函数实例化User模型
10 $user = model('User');
11 // 模型对象赋值
12 $user->data([
13 'name' => 'thinkphp',
14 'email' => 'thinkphp@qq.com'
15 ]);
16 $user->save();
17
18 //多条数据新增
19 //method 1
20 $user = new User;
21 $list = [
22 ['name'=>'thinkphp','email'=>'thinkphp@qq.com'],
23 ['name'=>'onethink','email'=>'onethink@qq.com']
24 ];
25 $user->saveAll($list);
26
27 //method 2
28 $user = new User;
29 $list = [
30 ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
31 ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com'],
32 ];
33 $user->saveAll($list, false);
不知到各位是怎么想的,反正我按照了之前的做法,直接使用 $model->save($data);新增一条数据,没想到真的可以成功。
然后惯性的思想,循环的时候就用了$model->isUpdate(fasle)->save($data);
然后?没然后了,悲催了:
1 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '57' for key 'PRIMARY'
显示明显。存在了相应的数据阻止了数据的新增。如果从百度上上面去单从这个错误区找解决方法的话,估计就是教你把主键设置为自增字段。
但是,明显楼主在设计数据表的时候,主键已经为子增字段,何况之前还能新增数据!
真的是神奇。然后我就去数据库查看了一下数据的记录,还真的是发现有一条记录里面,但是这条记录除了主键,其余的只有默认信息。
猜测,是在执行过程中,执行了两次新增,不知到为什么第二次新增的时候,主键的值不知到为何与第一次的新增值关联了起来。
楼主修行不足,没法深究。然后看了一下文档下面的评论才找到解决方法。
错误执行时的代码:
1 //新增
2 public function test_add(){
3 $data = [
4 'name' => 'tm',
5 //'score' => 92
6 'iphone' => '13631789377',
7 'email' => 'shangwushe@gmail.com',
8 'status' => 1
9 ];
10
11 $student = model('Student');
12 // 一条记录
13 $res = $student->save($data);
14 dump($student->id);
15 //多条记录
16 for($i = 0; $i < 4; $i++){
17 $res = $student->isUpdate(false)->save($data);
18 dump($student->id);
19 }
20 }
这个仅仅是为了测试新建的一个数据表。
一下是成功插入数据的代码:
1 //新增
2 public function test_add(){
3 $data = [
4 'name' => 'tm',
5 //'score' => 92
6 'iphone' => '13631789377',
7 'email' => 'shangwushe@gmail.com',
8 'status' => 1
9 ];
10
11 $student = model('Student');
12 //单条记录
13 $res = $student->save($data);
14 dump($student->id);
15
16 // 多条记录
17 for($i = 0; $i < 4; $i++){
18 $res = $student->data($data, true)->isUpdate(false)->save();
19 dump($student->id);
20 }
21 }
由代码看出,把数据放在前面用data函数传递,至于第二个参数,我看到讨论区有人传进去就错了,可是作者说请以最新代码为准~~~为那老哥默哀几分钟。
但是本人设不设置第二个参数都试了一下,没发现有什么不一样。如果日后代码修改了。大家请以我现在的版本为准~~~汗!!
总结一下学习tp5的心得:
看了整整一个星期,断断续续,反反复复。只能说作者还是需要完善一下文档吧。毕竟像楼主这样的穷学生还是很多的--没钱去看收费的文档。
最终要的一点就是--请及时更新一下自己的代码。不要看文档说什么就是什么。一定要动手,因为,你分分钟不知到代码有没有更新了。(现在我直接git他们的项目回来的)
更重要的一点就是:尝试各种办法没解决问题的时候,去看一下文档下面的评论,或许答案就在哪里。真的。我这个多条记录的data函数就是这样找来的!
thinkphp5 模型批量增加数据小记的更多相关文章
- Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据
前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...
- Thinkphp5.0 的使用模型Model删除数据
Thinkphp5.0 的使用模型Model删除数据 一.使用destory()删除数据 //删除id为3的记录 $res = User::destroy(3); //返回影响的行数 dump($re ...
- Thinkphp5.0 的使用模型Model更新数据
Thinkphp5.0 的使用模型Model更新数据 (1)使用update()方法进行更新数据 一.where条件写在更新数据中 (这种情况更新的数据,必须含主键) $res = User::upd ...
- Thinkphp5.0 的使用模型Model添加数据
Thinkphp5.0 的使用模型Model添加数据 使用create()方法添加数据 $res = TestUser::create([ 'name' => 'zhao liu', 'pass ...
- c#调用存储过程实现批量增加和修改数据
1 例如当我在编辑表格数据,一次编辑了多行需要保存到数据库时,就需要判断数据库中是否已经存在,存在则修改,不存在则新增一条或多条数据,即所谓批量增加或者跟新数据. 首先需要构建数据包,把要添加或者跟新 ...
- SSM框架之批量增加示例(同步请求jsp视图解析)
准备环境:SSM框架+JDK8/JDK7+MySQL5.7+MAVEN3以上+Tomcat8/7应用服务器 示例说明: 分发给用户优惠券,通过checkbox选中批量分发,对应也就是批量增加. 对于公 ...
- 如何利用.NETCore向Azure EventHubs准实时批量发送数据?
最近在做一个基于Azure云的物联网分析项目: .netcore采集程序向Azure事件中心(EventHubs)发送数据,通过Azure EventHubs Capture转储到Azure Blog ...
- SQL Server 批量插入数据方案 SqlBulkCopy 的简单封装,让批量插入更方便
一.Sql Server插入方案介绍 关于 SqlServer 批量插入的方式,有三种比较常用的插入方式,Insert.BatchInsert.SqlBulkCopy,下面我们对比以下三种方案的速度 ...
- 谈FME批量自动化数据转换方法
FME作为转换神器,支持几百种格式的互转,实现互操作化.从fme.exe执行方式入手,讨论Command命令式执行模板(.fmw/.fmwt)和脚本(.tcl/.py)实现自动化批量转换. 1.fme ...
- hibernate 批量增加 修改 删除
4.2 Hibernate的批量处理 Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作.例如调用Session的delete ...
随机推荐
- ( Ubuntu系统下 ) vim插件安装 supertab 实现tab键的补全功能 (vim+python环境下)
本文前提已经安装了 Vundle : 下载 supertab : git clone https://github.com/ervandew/supertab ~/.vim/bundle/ 编 ...
- 易拍照 —— 毕业生图像采集操作指南——如何使用 “易拍照” 微信小程序进行图像采集
易拍照 -- 毕业生图像采集操作指南--如何使用 "易拍照" 微信小程序进行图像采集 ============================================
- uview-ui toast 二次封装
开发用到uview 的toast 很常用的内容使用却很繁琐 所以做了简单封装方便使用 前后对比: this.$refs.uToast.show({ type: 'success', title: '成 ...
- games101 作业1及作业2分析及解决
games101 作业1及作业2分析及解决 去年的时候把games101的课程以及作业完成,但是整个过程比较粗略,也借助了不少外界的力量(doge),于是最近准备抽几天集中再把作业(1-7)过一遍,常 ...
- 如何诱导AI犯罪-提示词注入
我们用到的大模型基本把政治类信息.犯罪相关信息都已屏蔽.但是,黑客依旧可以使用提示词诱导和提示词注入的方式对大模型进行攻击. 1.提示词诱导 如果直接让AI提供犯罪过程,AI会直接拒绝.虽然AI对于大 ...
- String究竟能存储多少字符?
能存储多少字符,通过以下步骤来看 首先String的length方法返回是int.所以理论上长度一定不会超过int的最大值. 编译器对字符串字面量长度的限制源自Java编译器(如javac)在处理常量 ...
- 我恨 gevent
报错了一晚上,最后发现是 python 版本不对.3.11,3.12,3.8,3.10 试了个遍,最后 3.10 终于编译通过了 还有这个 greenlet,每次都是它和 gevent 合着来恶心我 ...
- MySQL的索引原理及使用
MySQL中的索引模型 Mysql中的索引使用的数据结构一般为搜索树,这里的搜索树,一般使用B树,这里补一下数据结构中的B树结构:说B树之前,先顺一个前置的知识点,平衡二叉树: 平衡二叉树 二叉树应该 ...
- 【YashanDB知识库】v$instance视图中实例角色含义不明确
[标题]v$instance视图中实例角色含义不明确 [问题分类]文档问题 [关键词]YashanDB, v$instance, 实例角色 [问题描述]v$instance视图中实例角色(如MASTE ...
- DRBD - Distributed Replication Block Device
Ref https://computingforgeeks.com/install-and-configure-drbd-on-centos-rhel https://www.veritas.com/ ...