近期用到同步数据的工具,就是将一个网站的订单信息同步到一个后台订单系统中,由于订单数据量较大,
所以就用到了"批量" --- 批量获取 批量插入
1: 获取对象
$query = HmhOrder::find()
->select('id ,uid, order_no, remark, total_pay, pay_type, trade_no, order_from, create_at, update_at, pay_at, pay_status, is_del');
if ($starTime && $endTime) {
$query->andFilterWhere(['between', 'create_at', $starTime, $endTime]);
}
$query->with(['uid'=>function($query) {
return $query->select('contact_id, truename');
}])->asArray();
注意: 上面就是你使用batch之前,要获取对象$query, 其中asArray一定不能忘,因为后面你要遍历得到数组.....
2: batch的使用:
下面就是使用batch(), 每次取多少条数据,此时我设置的100条
foreach ($query->batch(100, Yii::$app->crmDb) as $rows) {
if (!$rows || !is_array($rows)) {
echo $this->stdout("无数据信息!\n", Console::BOLD);die; //这行是我用控制台输出的方式,让显示有点颜色
}
//遍历每一组数据,进行拆分各个字段,进行组合
foreach ($rows as $key => $value) {
//下面就是遍历你取出的每一条数据
......
}
}
提示:
Yii::$app->crmDb 这是我的本地common/config/main-local.php文件下指向数据库以及数据库名字,密码,表前缀,等等
例如:
return [
'components' => [
'crmDb' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=crm_test',
'username' => 'root',
'tablePrefix' => 'hm_',
'password' => '199285',
'charset' => 'utf8',
],
],
];
3: 批量插入batchInsert 到另一张表中
$result = Order::find()
->createCommand()
->batchInsert(Order::tableName(),$keys,$data)
->execute();
其中:
batchInsert() 里面有三个参数: 表名 要插入的表字段数组 要插入的表数据
$keys 是你要插入的表字段数组, 例如: ['name', 'age']
$data 是你要批量插入的数组集合(记得是一个二维数组哦!)
例如:[['Tom', 30],['Jane', 20],['Linda', 25]]
以上就是我觉得比较应该注意的要点吧! 比较零散,是我从代码中抠出来的!........
@@ 下面是我的项目代码示例:
common/config/main-local.php配置文件:
<?php
return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql: