ThinkPHP 命令行工具中,你可以为选项设置 别名,通过为选项指定一个简短的别名来简化命令输入。例如,如果你希望 --force-recreate 选项有一个简短的别名 -f,你可以通过在 addOption 方法中设置第二个参数来实现这一点。

示例:为选项设置别名

addOption 方法的第二个参数中设置别名。这里是一个包含别名的示例:

<?php
declare (strict_types = 1); namespace app\command; use think\console\Command;
use think\console\Input;
use think\console\input\Option;
use think\console\Output;
use think\facade\Db; class CreateViews extends Command
{ protected function configure()
{
// 设置命令名称和描述
$this->setName('创建视图')
->setDescription('为数据库中的所有表生成视图')
->addOption('force-recreate', 'f', Option::VALUE_NONE, '如果视图已经存在则强制重新创建');
} protected function execute(Input $input, Output $output)
{ $forceRecreate = $input->getOption('force-recreate'); $tables = getAllTables();
// 获取是否删除现有视图的参数
if (empty($tables)) {
$output->writeln('没有找到任何表!');
return;
}
// 遍历所有表,为每个表创建视图
foreach ($tables as $tableName) {
$fields = getTableFields($tableName); if(!empty($fields)){
// 初始化字段映射
$fieldMappings = [
'CREATED_BY' => 'CREATOR_ID',
'CREATED_TIME' => 'CREATE_TIME',
'UPDATED_BY' => 'UPDATE_USER_ID',
'UPDATED_TIME' => 'UPDATE_TIME',
'DELETED' => 'DEL_FLAG'
];
// 构建 SELECT 语句
$selectFields = [];
foreach ($fields as $columnName) {
// 如果表中包含指定字段,进行重命名
if (array_key_exists($columnName, $fieldMappings)) {
$selectFields[] = "$columnName AS " . $fieldMappings[$columnName];
} else {
$selectFields[] = $columnName;
}
} // 生成视图名称:使用 'view_' 作为前缀
$viewName = 'view_' . $tableName; // 视图名称 // 检查视图是否已经存在
$viewExists = Db::query("SELECT COUNT(*) as count FROM information_schema.views WHERE table_name = '$viewName' AND table_schema = DATABASE()"); if ($viewExists[0]['count'] > 0) {
if ($forceRecreate) {
// 如果视图存在并且需要强制重建,则先删除旧视图
Db::query("DROP VIEW IF EXISTS $viewName");
$output->writeln("视图 $viewName 已存在,已删除旧视图。");
} else {
$output->writeln("视图 $viewName 已存在,跳过创建。");
continue; // 跳过当前表,继续处理下一个表
}
} try {
// 生成 CREATE VIEW 语句
$createViewSql = "CREATE VIEW $viewName AS SELECT " . implode(', ', $selectFields) . " FROM $tableName";
Db::query($createViewSql);
$output->writeln("视图 $viewName 创建成功!\n");
} catch (\think\db\exception\DbException $e) {
// 捕获 SQL 异常
$output->writeln("视图 $viewName 创建失败!错误信息:" . $e->getMessage());
} break;
}else{
$output->writeln("表 $tableName 没有字段!\n");
}
}
}
}

关键点:

  • 别名的设置:在 addOption 方法的第二个参数中设置别名:

    • --force-recreate 的别名是 -f
    • --skip-existing 的别名是 -s

使用命令行时:

你可以通过别名来快速使用选项。例如:

  • 使用 -f 别名代替 --force-recreate

    php think createViews -f
  • 使用 -s 别名代替 --skip-existing

    php think createViews -s
  • 使用完整选项:

    php think createViews --force-recreate --skip-existing

总结:

thinkphp6 使用自定义命令,生成数据库视图的更多相关文章

  1. NetCore使用使用Scaffold-DbContext命令生成数据库表实体类

    一.为了模拟项目,本处创建了一个NetCore的Web项目.打算在Models文件夹下生成数据库表的实体类. 二.在程序包管理控制台,输入“Scaffold-DbContext "Serve ...

  2. EF使用CodeFirst方式生成数据库&技巧经验

    前言 EF已经发布很久了,也有越来越多的人在使用EF.如果你已经能够非常熟练的使用EF的功能,那么就不需要看了.本文意在将自己使用EF的方式记录下来备忘,也是为了给刚刚入门的同学一些指导.看完此文,你 ...

  3. node生成自定义命令(yargs/commander)

    第一部分可以生成一个自定义命令,例如常见的”express”,yargs和commander则可以在生成的自定义命令上做扩展,yargs将命令扩展成类似express --l xx的形式;而comma ...

  4. Maven之自定义archetype生成项目骨架(一)

      Maven之自定义archetype生成项目骨架(一) 标签: mavennexus插件 2015-07-15 16:40 2443人阅读 评论(0) 收藏 举报  分类: Maven技术(9)  ...

  5. (转)Maven之自定义archetype生成项目骨架

    背景:最近在开发一个项目的基础构件,在以后项目的开发过程中可以直接使用该构件快速的生成项目骨架进行开发. 摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其 ...

  6. 一个简单的NetCore项目:1 - 搭建框架,生成数据库

    1- 启动项目 安装.NETCORE SDK,教程在网上可以搜索的到,这里就不讲述了.简单粗暴的方式就是安装最新的VS2015. 2-搭建框架 2.1 打开VS新建一个项目,在弹出的新建项目对话框中, ...

  7. How to: Map a Persistent Class to a Database View Which Has No Key Field如何:映射持久化类到无主键数据库视图

    With XAF, you can build new applications from scratch or maintain existing databases. The How to: Ge ...

  8. 【AMAD】django-extensions -- Django框架的自定义命令扩展集合

    动机 简介 个人评分 动机 使用Django进行开发的时候,会不会感觉开发工具少了一些.比如每次进入python shell调试的时候要重新import每个model. 简介 django-exten ...

  9. SyBase Powerdesigner生成数据库详细表

    工具: Sybase PowerDesigner 15.1 Microsoft SQL Server 2005 第一步概要设计: 打开PowerDesigner软件,设计“概念数据模型”(Concep ...

  10. DB2LOOK命令提取数据库对象信息

    提取复制数据库的DDL语句:db2look -d BCDLJS -e -o db2look.sql -a -a:导出所有用户的DDL-o: 定向结果到文件-d: 数据库名-e: 抽取复制数据库所需的 ...

随机推荐

  1. DateTimeExtensions:一个轻量C#的开源DateTime扩展方法库

    推荐一个专门为System.DateTime编写的扩展方法库. 01 项目简介 该项目主要是为System.DateTime和System.DateTimeOffset的编写的扩展方法,包括自然日期差 ...

  2. 收藏几个常用的vue自定义组件,抄自 他人,以防丢失

    在 Vue,除了核心功能默认内置的指令 ( v-model 和 v-show ),Vue 也允许注册自定义指令.它的作用价值在于当开发人员在某些场景下需要对普通 DOM 元素进行操作. Vue自定义指 ...

  3. w3cschool-Apache Storm 教程

    https://www.w3cschool.cn/apache_storm/ Apache Storm教程Apache Storm简介Apache Storm核心概念Apache Storm集群架构A ...

  4. Java中的值类型

    在打算了解Java的时候,根据C#的经验,了解一下Java中有哪一些值类型,如何判断某个类型为值类型还是引用类型是一件值得做的事情. 在C#中,值类型存放在栈中,不需要垃圾回收,引用类型存放在堆中,需 ...

  5. Kotlin:【继承】:继承、函数重载、类型检测、as类型转换、智能类型转换、Kotlin层次

  6. uni-app路由跳转

    navigateTo redirectTo (1)保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面 (如果A->B来回频繁切换,不要A B两个方法都使用 ...

  7. 一键实现风险识别+处理,天翼云AOne助手尽在“掌”握!

    随着企业数字化建设的不断加速,优化站点性能与响应速度成为当今时代的一个重要课题.对于政务.金融类机构来说,其门户网站.信用卡中心等代表着对外形象,如果出现访问不通或者时延严重的现象将影响业务办理效率以 ...

  8. 云电脑Win7系统安装报错详解:问题与解决方案

    本文分享自天翼云开发者社区<云电脑Win7系统安装报错详解:问题与解决方案>,作者:每日知识小分享 随着云计算技术的快速发展,越来越多的人开始使用云电脑.然而,在为云电脑安装Win7系统时 ...

  9. [记录点滴] 记录一次用 IntelliJ IDEA遇到scope provided 的坑

    0x00 问题 最近在调试一个网上的项目,结果遇到两个问题,特此记录下解决过程. 问题: 某一个jar包有版本冲突 某一个类,居然在IntelliJ IDEA中运行调试时候找不到 0x01 解决途径 ...

  10. Mac安装Flume

    一.下载Flume(在SoftWare目录下) wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.8.0/apache-flume-1.8 ...