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. (十).NET6.0 搭建基于Quartz组件的定时调度任务

    1.添加Quartz定时器组件 2.新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目.然后新建一个中间调度类,叫QuartzMiddleJob 3.新建一个Job工厂类,叫YsqJ ...

  2. Solution -「CF 1366E2」Chiori and Doll Picking (hard version)

    \(\mathscr{Description}\)   Link.   给定 \(\{a_n\}\), 值域 \([0,2^m)\). 对于每个 \(i\in[0,m]\), 求有多少个 \(\{a_ ...

  3. Solution Set -「DS 专题」兔年的兔子写 DS 会有小常数吗?

    目录 Day 1 「Ynoi 2009」「洛谷 P6109」rprmq1 ^ 「Ynoi Easy Round 2021」「洛谷 P8512」TEST_152 「Ynoi 2005」「洛谷 P7907 ...

  4. 防止SQL注入的五种方法

    1.首先看一下下面两个sql语句的区别: <select id="selectByNameAndPassword" parameterType="java.util ...

  5. 将github个人访问令牌与TortoiseSVN一起使用

    最近用TortoiseSVN提交到Github身份验证,总是提示无效的用户名密码,反复确认密码没输入错的.但是就是提交不了(能获取). 报错如下: 错误: No more credentials or ...

  6. 手撸原生js放大镜效果

    普及知识:放大镜特效涉及到的几个值 offsetWidth    获取元素的宽度offsetHeight  获取元素的高度offsetLeft父元素没有定位时,获取元素距离页面的左边距,父元素有定位时 ...

  7. 小程序之confirm-type改变键盘右下角的内容和input按钮详解

    confirm-type的介绍 confirm-type 在什么时候使用呢? 如果说搜索框的时候,当用户输入完了之后,我们就需要 将confirm-type="search"的值设 ...

  8. Ubuntu Linux部署DeepSeek

    技术背景 DeepSeek是这段时间最热门的话题之一,其蒸馏模型可以实现低成本而高质量的推理,使得我们现在可以在本地小型化的硬件上也用上大模型这一AI利器.本文主要介绍通过Ollama来部署DeepS ...

  9. shell脚本sed命令

    Sed 是一个脚本型的编译器,全称StreamEDitor,即流编辑器是非交互式的编辑器 sed 原理简析sed 以行为处理单位,每次从标准输入/文本获取一行信息,存储到其" 模式空间 &q ...

  10. ollama-deepseek 部署

    选择云资源 选用智星云 4090 高性能 1.57 一小时 windows操作系统 可以修改带宽来增加下载速度 使用mstsc远程登录 使用ollama https://ollama.com/ oll ...