话不多说,我们步入正题,先看一个简单到小学生都认识的表结构
|
1
2
3
|
//test id name |
我们现在就是要在yii2中对这张数据表批量插入10条数据
我们想要的方式肯定是下面这样的,一条sql多么干脆直接了事
|
1
|
insert into test (name) values ('zhangsan'), ('lisi'); |
分析都分析完了,好吧,赶紧看看具体实现
|
1
2
3
4
5
6
|
//假如 $names = ['zhangsan', 'lisi']; $data = []; foreach ($names $k => $v) { $data[] = [$v]; } |
我相信很多人都是冲着AR能不能实现批量插入来的,理由无非就是更安全更方便操作呗。但是官方手册貌似没有,没有,没有。。。心都碎了,竟然没有,至少我没有找到,你找到了请点击原文找到我并联系我,我也si分的需要方法啊。
不过不巧的是,我找到一个跟AR相关联的操作方法,我们共同分享参考一下看看具体怎么回事
假设有一个Post类的数组 $models,你就可以这样操作
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
use yiihelpersArrayHelper; $rows = []; foreach ($models as $model) {if ($model->validate()) { $rows[] = $model->attributes;} } $rows = ArrayHelper::getColumn($models, 'attributes'); $postModel = new Post; Yii::$app->db->createCommand()->batchInsert(Post::tableName(), $postModel->attributes(), $rows)->execute(); //当然啦,上面给出的是插入所有的字段,但事实往往事与愿违,也简单,稍作调整即可 $rows[] = [ 'title' => $model->title, 'content' => $model->content, ]; Yii::$app->db->createCommand()->batchInsert(Post::tableName(), ['title', 'content'], $rows)->execute(); |
虽然又回到了batchInsert上,不过没关系,该验证的都验证了,安全是无须担心的。
© 版权声明
本文刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等部门来源于互联网,版权均归原作者所有!本网站提供的内容服务于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
联系信息:邮箱aoxolcom@163.com或见网站底部。
联系信息:邮箱aoxolcom@163.com或见网站底部。
THE END















请登录后发表评论
注册
社交帐号登录