- chunk 方法必须要使用orderBy设置一个排序字段(该字段最好是存在索引,速度较快)
- chunk 方法是更具 limit 和 order by 关键字查询数据的这里就涉及到分页查询的问题所以需要排序字段
- chunk 方法中 不能删除当前查询表的数据 这样会导致查询数据混乱
- 示例
// sql: select `product_id`,`sku` from `oc_product` where `sku` like '%-bingshopping' order by `sku` asc
// 这里查询oc_product表sku后缀xxxxshopping相关数据
DB::connection('mysql_us')
->table('oc_product')
->select(['product_id','sku'])
->where('sku','like','%xxxxshopping')
->orderBy('sku','ASC')
->orderBy('product_id','ASC')
->chunk(50, function($datum) use ($bar){
foreach ($datum as $item){
// 删除数据 这里又删除查询出来sku后缀xxxxshopping相关数据
// 这样会导致存在部分数据被删除 (主要是limit分页的页数在逐渐增大 会到某一个值page查不到数据)
$this->delete($item->product_id, $item->sku);
}
$bar->advance();
});
网友评论