美文网首页
Lumen数据查询中使用chunk

Lumen数据查询中使用chunk

作者: 腿长袖子短 | 来源:发表于2021-09-18 14:16 被阅读0次

    在数据查询中,当一次查询的结果返回的查询结果数据量很大时,一次读取到内存中会造成程序挂掉,但是需求又不能进行数据分页,比如在定时任务中,此时chunk闪亮登场

    这是一个定时任务中的使用示例

    /**
         * 命令描述
         *
         * @var string
         */
        protected $description = '为已核销未结算未退款的订单券码生成唯一标识key';
        
        /**
         * @var BatchUpdateData
         */
        protected $batch;
        
        /**
         * @var string
         *
         * 加密类型
         */
        const ALGO = 'MD5';
        
        /**
         * @var integer
         *
         * 执行chunk时,数据块的数据容量
         */
        const CHUNK_NUMBER = 2000;
        
        public function __construct(BatchUpdateData $batch)
        {
            parent::__construct();
            $this->batch = $batch;
        }
        
        public function handle()
        {
            set_time_limit(0);
            $updateTableName = 'yz_virtual_log';
            
            VirtualCodeLog::query()
                ->select(['id', 'order_id', 'virtual_code'])
                ->where([
                    ['error_status', '=', 1],//已核销
                    ['balance_status', '=', 0],//未结算
                    ['refund_status', '=', null]//无退款
                ])
                ->chunk(self::CHUNK_NUMBER, function ($ret) use ($updateTableName) {
                    $dataArr = [];
                    foreach ($ret as $v) {
                        $only_key  = hash_hmac(self::ALGO, $v->order_id . $v->virtual_code, bin2hex(random_bytes(8)));
                        $dataArr[] = [
                            'id' => $v['id'],
                            'only_key' => $only_key
                        ];
                    }
                    $this->batch::batchUpdate($dataArr, $updateTableName);
                });
        
            $dingDD = new DingMsgController();
            $dingDD->sendMsg('可兰素数据批量生成唯一key','执行成功');
        }
    

    相关文章

      网友评论

          本文标题:Lumen数据查询中使用chunk

          本文链接:https://www.haomeiwen.com/subject/tptygltx.html