thinkphp6 自定义命令行command使用

news2024/11/17 0:18:13

在tp框架中往往需要定义一些命令去大批量的操作行为,直接在控制器中会有超时报错的情况,而且也会很慢,所以就需要使用到tp里的自定义命令行来完成这些操作行为。

比如:现在有一张表数据有上百万,要更新表中某个字段的值就可以使用自定义命令

1、建立命令类文件,新建application/index/command/Test.php

<?php
declare (strict_types = 1);

namespace app\index\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Db;
use think\Exception;

class Test extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('test')
            ->setDescription('the test command');
    }

    protected function execute(Input $input, Output $output)
    {
        ini_set('memory_limit', '1024M');
        $output->writeln('********** 同步开始 **********');
        $this->updatePayDepartmentID(); // 更新方法
        $output->writeln('********** 同步结束 **********');
    }
    
    protected function updatePayDepartmentID() {

    }

}

updatePayDepartmentID方法,我是需要更新用户ID,每次更新5000条,一直更新所有为止

protected function updatePayDepartmentID() {
    // 查询出第一条ID
    $ids = Db::table('table_name')->order('ID ASC')->limit(1)->select()->toArray();
    $id = $ids[0]['ID'];
    $num = $id + 5000;  // 5000更新一次
    while (1) {
        try {
            $data = Db::table('table_name')->where('ID','>=', $id)->where('ID','<=',$num)->select()->toArray();
            if(!$data){
                exit('没了吧1');
            }
            foreach($data as $k=>$v){
            	// 根据旧用户ID 更换新用户ID
                $user = Db::table('table_user')->where('xsc_id', $v['Xsc_ID'])->value('id');
                $userID = empty($user) ? 0: $user;
                $res = Db::table('table_name')->where('ID', $v['ID'])->update(['user_ID'=>$userID]);
                echo $v['ID']."\n";
            }
            $id = $id + 5000;
            $num = $num + 5000;
        } catch (Exception $e) {
            echo $e->getMessage()."\n";
            break;
        }
    }
}

2、配置console.php文件,目录在application/config/console.php(tp不同版本,配置文件不一样)这个是thinkphp6的配置

<?php
// +----------------------------------------------------------------------
// | 控制台配置
// +----------------------------------------------------------------------
return [
    // 指令定义
    'commands' => [
        // 更新erp用户ID
        'test' => \app\index\command\Test::class,
    ],
];

4、打开cmd命令窗口切换目录到站点根目录,然后执行

php think test  ,效果如下,会一直输出更新过的数据ID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宝塔面板安装Python和Flask(新版Python项目)

&#xff08;一&#xff09;宝塔面板的项目菜单&#xff0c;打开Python项目的“项目版本管理” 安装Python版本3.10.0。 会创建一个Python版本的文件夹www/server/pyproject_evn/versions/ 会创建一个Python虚拟环境的文件夹www/server/pyproject_evn/python_venv/ &#xf…

深入探讨Docker生态系统,Docker Compose vs. Docker Swarm vs. Kubernetes:深入比较

文章目录 Docker ComposeDocker SwarmKubernetesDocker Compose适用场景 Docker Swarm适用场景 Kubernetes适用场景 对比和结论 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xf…

【小黑嵌入式系统第五课】嵌入式系统开发流程——开发工具、交叉开发环境、开发过程(生成调试测试)、发展趋势

上一课&#xff1a; 【小黑嵌入式系统第四课】嵌入式系统硬件平台&#xff08;二&#xff09;——I/O设备、通信设备&#xff08;UART&USB&蓝牙&#xff09;、其他&#xff08;电源&时钟&复位&中断&#xff09; 文章目录 一 嵌入式软件开发工具的分类二 嵌…

Express框架开发接口之登录与注册API

我们利用nodeexpressmysql开发接口&#xff0c;对数据库数据进行简单增、删、查改等操作。 接口是什么&#xff1f; 接口是 前后端通信的桥梁 简单理解&#xff1a;一个接口就是 服务中的一个路由规则 &#xff0c;根据请求响应结果 接口的英文单词是 API (Application Progra…

分支预测机制

在Linux中&#xff0c;__predict_false和__predict_true是用于优化分支预测的宏。这些宏通过向编译器提供关于条件分支可能结果的提示&#xff0c;来帮助生成更有效的机器代码。 __predict_false宏扩展为一个属性&#xff0c;该属性指示编译器预测给定分支可能为假。这意味着&…

jdk20 升级, gson 的坑

项目部署在服务器中请求报下面这个错 java.lang.reflect.InaccessibleObjectException: Unable to make private java.util.Collections$EmptyList() accessible: module java.base does not "opens java.util" to unnamed module 2c35e847at java.base/java.lang.r…

制作一个简单的C语言词法分析程序

1.分析组成 C语言的程序中&#xff0c;有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表&#xff0c;给出对应的识别码&#xff0c;然后跟据对应的表格来写出程序 2.程序设计 程序主要有循环判断构成。不需推理即可产生的符号我…

【需水预测】区域需水量预测方法-定额法

区域需水量预测方法-定额法 1 生活用水需水量预测1.1 人口指标预测1.2 居民生活综合用水定额分析 2 农业需水量预测2.1 农田灌溉需水量2.2 林牧渔业需水量另&#xff1a;灌溉面积定义 3 工业需水量预测3.1 工业增加值发展指标预测 4 生态需水量预测4.1 生态环境面积发展指标预测…

APP自动化测试 ---- Appium介绍及运行原理

在面试APP自动化时&#xff0c;有的面试官可能会问Appium的运行原理&#xff0c;以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架&#xff0c;可用于原生&#xff0c;混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS&#xf…

工具分享:腾讯云价格计算器使用方法_服务器报价不求人

腾讯云服务器价格计算器可以一键计算出云服务器的精准报价&#xff0c;包括CVM实例规格价格、CPU内存费用、公网带宽收费、存储系统盘和数据盘详细费用&#xff0c;腾讯云百科txybk.com分享腾讯云价格计算器链接入口、使用方法说明&#xff1a; 腾讯云服务器价格计算器 打开腾…

项目经验分享|openGauss 陈贤文:受益于开源,回馈于开源

开源之夏 项目经验分享 2023 #08 # 关于 openGauss 社区 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验&#xff0c;结合企业级场景需求&#xff0c;持续构建竞争力特性。同时openGauss也是…

树莓派基金会近日发布了新版基于 Debian 的树莓派操作系统

导读树莓派基金会&#xff08;Raspberry Pi Foundation&#xff09;近日发布了新版基于 Debian 的树莓派操作系统&#xff08;Raspberry Pi OS&#xff09;&#xff0c;为树莓派单板电脑带来了新的书虫基础和一些重大变化。 新版 Raspberry Pi OS 的最大变化是它现在基于最新的…

为了让女儿学打字,开发了个免费的打字网站

以后计算机也算是门手艺活了&#xff0c;想要增加沟通效率还是从入门打字开始。 之前小时候也玩过各种各样的打字游戏&#xff0c;警察抓小偷、打蜜蜂之类的&#xff0c;小的时候也没有各种教程不方便&#xff0c;一指禅玩这种游戏真的是累死&#xff0c;也没有任何提示。急得直…

如何分离一个要素的shp矢量文件:利用ArcGIS分割工具

下面介绍如何用ArcGIS对含有多个分离区域的一整个面要素进行分割 如下图&#xff0c;现在想要将下方的长形shp提取出来&#xff0c;首先打开shp文件&#xff1a; 右击空白处查看该矢量文件的投影信息&#xff1a; 在文件夹中新建shp文件&#xff0c;设置一样的投影&#xff1a…

docker - win10 家庭版 开始虚拟化

文章目录 前言docker - win10 家庭版 开始虚拟化 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0c;那欢迎常来啊…

ETCD备份与恢复

文章目录 主要内容一.备份1.先安装etcd客户端代码如下&#xff08;示例&#xff09;: 2.备份成文件并查看代码如下&#xff08;示例&#xff09;: 3.解释 二.恢复1.先停止服务代码如下&#xff08;示例&#xff09;: 2.删除现有ETCD&#xff0c;并恢复数据代码如下&#xff08;…

SpringBoot拉取高德天气预报数据

SpringBoot拉取高德天气预报数据 一、账号申请 1.整体流程 天气文档&#xff1a;https://lbs.amap.com/api/webservice/guide/api/weatherinfo 整体流程可参考&#xff1a;https://lbs.amap.com/api/webservice/guide/create-project/get-key 2.注册账号 注册地址&#x…

cmake 使用include 分层加载

include命令 说到cmake&#xff0c;可能最先想到的就是CmakeLists.txt文件&#xff0c;但是在很多情况下&#xff0c;也会看到.cmake文件。 cmake文件是干什么的&#xff0c;甚至会想.cmake文件是不是cmake的正统文件&#xff0c;而CmakeLists.txt并不是。但其实&#xff0c;Cm…

IP 地址查询,快速查询自己的 IP 地址

文章目录 在线结果 在线 http://myip.top/ 结果

c++ queue 的使用

目录 1. 默认构造函数 2. void push(const T& x) 3. void pop() 4. T& front() 5. T& back() 6. bool empty() 7. size_t size() 下面是 queue 的简介&#xff0c;来自 queue - C Reference (cplusplus.com) 的中文翻译&#xff0c;看看就行了&#xff…