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';
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'
15 ]);
16$user->save();
17
18//多条数据新增
19//method 1
20$user = new User;
21$list = [
22    ['name'=>'thinkphp','email'=>'thinkphp@qq'],
23    ['name'=>'onethink','email'=>'onethink@qq']
24 ];
25$user->saveAll($list);
26
27//method 2
28$user = new User;
29$list = [
30    ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq'],
31    ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq'],
32 ];
33$user->saveAll($list, false);
不知到各位是怎么想的,反正我按照了之前的做法,直接使⽤ $model->save($data);新增⼀条数据,没想到真的可以成功。
然后惯性的思想,循环的时候就⽤了$model->isUpdate(fasle)->save($data);
然后?没然后了,悲催了:
1 SQLSTATE[23000]: Integrity constraint violation: 106
2 Duplicate entry '57' for key 'PRIMARY'
显⽰明显。存在了相应的数据阻⽌了数据的新增。如果从百度上上⾯去单从这个错误区解决⽅法的话,估计就是教你把主键设置为⾃增字段。
但是,明显楼主在设计数据表的时候,主键已经为⼦增字段,何况之前还能新增数据!
真的是神奇。然后我就去数据库查看了⼀下数据的记录,还真的是发现有⼀条记录⾥⾯,但是这条记录除了主键,其余的只有默认信息。
猜测,是在执⾏过程中,执⾏了两次新增,不知到为什么第⼆次新增的时候,主键的值不知到为何与第⼀次的新增值关联了起来。
楼主修⾏不⾜,没法深究。然后看了⼀下⽂档下⾯的评论才到解决⽅法。
错误执⾏时的代码:
1//新增
2public function test_add(){
3$data = [
4            'name'  => 'tm',
5//'score'  => 92
6            'iphone' => '136********',
7            'email'  => 'shangwushe@gmail',
8            'status' => 1
9        ];
10
11$student = model('Student');
12// ⼀条记录
13$res = $student->save($data);
14        dump($student->id);
15//多条记录
16for($i = 0; $i < 4; $i++){
17$res = $student->isUpdate(false)->save($data);
18            dump($student->id);
19        }
20    }
这个仅仅是为了测试新建的⼀个数据表。
⼀下是成功插⼊数据的代码:
1//新增
2public function test_add(){
3$data = [
4            'name'  => 'tm',
5//'score'  => 92
6            'iphone' => '136********',
7            'email'  => 'shangwushe@gmail',
8            'status' => 1
9        ];
10
11$student = model('Student');
12//单条记录
13$res = $student->save($data);
14        dump($student->id);
15
16// 多条记录
17for($i = 0; $i < 4; $i++){
18$res = $student->data($data, true)->isUpdate(false)->save();
19            dump($student->id);
20        }
21    }
由代码看出,把数据放在前⾯⽤data函数传递,⾄于第⼆个参数,我看到讨论区有⼈传进去就错了,可是作者说请以最新代码为准~~~为那⽼哥默哀⼏分钟。
但是本⼈设不设置第⼆个参数都试了⼀下,没发现有什么不⼀样。如果⽇后代码修改了。⼤家请以我现在的版本为准~~~汗!!
总结⼀下学习tp5的⼼得:
看了整整⼀个星期,断断续续,反反复复。只能说作者还是需要完善⼀下⽂档吧。毕竟像楼主这样的穷学⽣还是很多的--没钱去看收费的⽂档。
最终要的⼀点就是--请及时更新⼀下⾃⼰的代码。不要看⽂档说什么就是什么。⼀定要动⼿,因为,你分分钟不知到代码有没有更新了。(现在我直接git他们的项⽬回来的)
更重要的⼀点就是:尝试各种办法没解决问题的时候,去看⼀下⽂档下⾯的评论,或许答案就在哪⾥。真的。我这个多条记录的data函数就是这样来的!
php实例代码教程

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。