楼主最近在学习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 模型批量增加数据小记的更多相关文章

  1. Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据

    前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...

  2. Thinkphp5.0 的使用模型Model删除数据

    Thinkphp5.0 的使用模型Model删除数据 一.使用destory()删除数据 //删除id为3的记录 $res = User::destroy(3); //返回影响的行数 dump($re ...

  3. Thinkphp5.0 的使用模型Model更新数据

    Thinkphp5.0 的使用模型Model更新数据 (1)使用update()方法进行更新数据 一.where条件写在更新数据中 (这种情况更新的数据,必须含主键) $res = User::upd ...

  4. Thinkphp5.0 的使用模型Model添加数据

    Thinkphp5.0 的使用模型Model添加数据 使用create()方法添加数据 $res = TestUser::create([ 'name' => 'zhao liu', 'pass ...

  5. c#调用存储过程实现批量增加和修改数据

    1 例如当我在编辑表格数据,一次编辑了多行需要保存到数据库时,就需要判断数据库中是否已经存在,存在则修改,不存在则新增一条或多条数据,即所谓批量增加或者跟新数据. 首先需要构建数据包,把要添加或者跟新 ...

  6. SSM框架之批量增加示例(同步请求jsp视图解析)

    准备环境:SSM框架+JDK8/JDK7+MySQL5.7+MAVEN3以上+Tomcat8/7应用服务器 示例说明: 分发给用户优惠券,通过checkbox选中批量分发,对应也就是批量增加. 对于公 ...

  7. 如何利用.NETCore向Azure EventHubs准实时批量发送数据?

    最近在做一个基于Azure云的物联网分析项目: .netcore采集程序向Azure事件中心(EventHubs)发送数据,通过Azure EventHubs Capture转储到Azure Blog ...

  8. SQL Server 批量插入数据方案 SqlBulkCopy 的简单封装,让批量插入更方便

    一.Sql Server插入方案介绍 关于 SqlServer 批量插入的方式,有三种比较常用的插入方式,Insert.BatchInsert.SqlBulkCopy,下面我们对比以下三种方案的速度 ...

  9. 谈FME批量自动化数据转换方法

    FME作为转换神器,支持几百种格式的互转,实现互操作化.从fme.exe执行方式入手,讨论Command命令式执行模板(.fmw/.fmwt)和脚本(.tcl/.py)实现自动化批量转换. 1.fme ...

  10. hibernate 批量增加 修改 删除

    4.2  Hibernate的批量处理 Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作.例如调用Session的delete ...

随机推荐

  1. 【转载】 tmux 向上向下翻页,翻屏

    作者:江河湖海洋链接:https://www.jianshu.com/p/8835f2d4245f来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. =========== ...

  2. Numb 题解

    前言 五一网课的例题,但是网上没有题解,所以来写一篇,就当攒 RP 了.题目可以在这里提交.原题是 Baekjoon - 19083,但是交不了? 题目简述 给你一个偶数 \(n\),求一个二进制数 ...

  3. Mac升级Ventura 13.0.1后无法远程ssh连接服务器

    原因 原因是Mac os Ventura升级了ssh到9.0,ssl到3.3.6,而服务器上的sshd还是老版本:服务器上的老版本ssh和ssl无法和mac上的新版本ssh和ssl交互,新版本ssh加 ...

  4. 2023 PTA天梯赛补题(L1 & L2)

    2023 天梯赛 L1 & L2 补题 L1 L1-089 最好的文档 输入输出题 #include<bits/stdc++.h> using namespace std; int ...

  5. MySql 字段类型长度问题理解

    mysql中字段长度理解 字符长度 设计表中设置的是字符长度,任意字符都占一个字符长度,使用char_length 函数获取 char_length(`name`) 字节长度 字节长度和数据表的字符集 ...

  6. Vite+Vue3 项目 华仔待办

    此"华仔",不是彼"华仔",你懂的! 先来了个截图 紧跟着,实现步骤也来了 1. 安装 Node.js,终端运行 npm create vue@latest,项 ...

  7. Vue3.5新增的baseWatch让watch函数和Vue组件彻底分手

    前言 在Vue 3.5.0-beta.3版本中新增了一个base watch函数,这个函数用法和我们熟知的watch API一模一样.区别就是我们之前用的watch API是和Vue组件以及生命周期是 ...

  8. Mac 右键菜单中出现多个 Edge 版本解决方法

    cd "/Applications/Microsoft Edge.app/Contents/Frameworks/Microsoft Edge Framework.framework/Ver ...

  9. 【Mac】之本地连接虚拟机linux环境

    上一篇安装完centos虚拟机之后,如何远程连接呢? 先进入虚拟机的界面: 发现没有bash 终端输入: # -bash :telnet:command not found # 发现是虚拟机没有安装 ...

  10. dotnet 读 WPF 源代码笔记 从 WM_POINTER 消息到 Touch 事件

    本文记录我读 WPF 源代码的笔记,在 WPF 底层是如何从 Win32 的消息循环获取到的 WM_POINTER 消息处理转换作为 Touch 事件的参数 由于 WPF 触摸部分会兼顾开启 Poin ...