楼主最近在学习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. docker容器挂载host宿主机的本地目录,docker容器与宿主机之间互相拷贝文件

    docker容器挂载host宿主机的本地目录,docker容器与宿主机之间互相拷贝文件 参考于: https://blog.csdn.net/weixin_37773766/article/detai ...

  2. 说说中国高校理工科教育中的基础概念混乱问题——GPU是ASIC吗

    在YouTube上看到这样一个视频: https://www.youtube.com/watch?v=7EXDp6c9n-Q&lc=Ugydwl8gppB5FWE8Y5V4AaABAg.9fc ...

  3. 多线程之park()与interrupt()的理解

    1.背景 其他不多说,很多时候面试会问 2.代码 package com.ldp.demo01; import com.common.MyThreadUtil; import lombok.exter ...

  4. Gradle工程编译报错:Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getModuleIdentifier()Lorg/gradle/api/artifacts/ModuleIdentifier;

    1.背景 从git上拉取代码后,编译报错如下: Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm ...

  5. 如何在Spring Cloud中实现Nacos客户端登录密码加密

    背景 公司规范要求配置文件里不能出现明文的密码.最近项目引入了Nacos作为服务的配置中心,使用的是spring-cloud-starter-alibaba-nacos-config这个包. 基本的b ...

  6. 循环Map的几种方法

    package cn.jdbc.test;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import ...

  7. Java开发环境安装笔记

    目录 JDK的版本 Java 8 Java 9 Java 11 (LTS) Java 17 (LTS) Java 21 JDK的环境变量设置 JAVAHOME 和 PATH 环境变量 JAVAPATH ...

  8. .NET静态代码编织——肉夹馍(Rougamo)4.0

    肉夹馍(https://github.com/inversionhourglass/Rougamo),一款编译时AOP组件.相比动态代理AOP需要在应用启动时进行初始化,编译时完成代码编织的肉夹馍减少 ...

  9. 《重学Java设计模式》笔记——建造者模式

    1. 建造者模式可以解决什么问题 我家里有各种形状的瓷器,盘子或者碗.虽然形状不同,但是所用的材料基本上是一样的,比如土.水.釉.彩这些基本的东西. 但是做不同款式的瓷器,方法是不同的.假如说我现在已 ...

  10. grpc报错合集以及解决方案

    这里介绍下grpc各种报错以及解决方案 io.grpc.StatusRuntimeException: UNIMPLEMENTED 这个错误网上很多,大部分情况下 是由于方法找不到,即客户端与服务端p ...