【ThinkPHP】实现一个逆向工程生成model

ThinkPHP为了节省一些重复的步骤,写了个简单版的生成model的工具,逆向生成model代码,节省时间,专注写业务代码。
ThinkPHP中的命令行也提供了一些生成代码的命令:

make:controller  创建控制器
make:model 创建模型
make:middleware 创建中间件

ThinkPHP也提供了逆向生成model的命令:optimize:autoload,但是提示:Command “optimize:autoload” is not defined.
于是就算了,也不想去研究它。还不如直接写一个。

下面是一个简单的逆向工程工具实现代码:

<?phpnamespace app\controller;use app\BaseController;
use think\Request;
use think\Facade\Db;class GeneratorController extends BaseController
{static $schema = "shushan";public function generator(){//获取表名$tables = Db::query("SELECT TABLE_NAME  as 'name'from information_schema.tables WHERE TABLE_SCHEMA = :dataBase", ["dataBase" => GeneratorController::$schema]);foreach ($tables as $key => $value) {foreach ($value as $item) {//获取字段名称和备注$COLUMNS = Db::query("select COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT from information_schema.COLUMNS where table_name = :itemand table_schema = :dataBase", ["item" => $item, "dataBase" => GeneratorController::$schema]);$file = fopen("tempFile/" . GeneratorController::snakeToCamel($item) . ".php", "w");fwrite($file, "<?php" . PHP_EOL . "namespace app\model;" . PHP_EOL. PHP_EOL . "use think\model;" . PHP_EOL. PHP_EOL . "class " . GeneratorController::snakeToCamel($item) . " extends Model". PHP_EOL . "{" . PHP_EOL);$content = "//设置字段信息" . PHP_EOL ."protected $" . "schema = [" . PHP_EOL;fwrite($file, $content);//写入字段foreach ($COLUMNS as $COLUMN) {$content = "'" . $COLUMN["COLUMN_NAME"] . "'" . "       =>"  ."'" . $COLUMN["DATA_TYPE"] . "'" . "," . "//" . $COLUMN["COLUMN_COMMENT"] . PHP_EOL;fwrite($file, $content);}$content = PHP_EOL . "];";fwrite($file, $content);fwrite($file, PHP_EOL . "}");fclose($file);}}return $this->success();}static function snakeToCamel($str, $capitalized = true){$result = str_replace('_', '', ucwords($str, '_'));if (!$capitalized) {$result = lcfirst($result);}return $result;}
}

生成的效果:

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

医院制剂研发与真实世界评价论坛圆满闭幕

医院制剂是新药的摇篮和宝库&#xff0c;现代科技为医院制剂的研发和转化赋能。在新时代新政策下&#xff0c;2023年07月16日&#xff0c;由湖南省药学会医院制剂研发与真实世界评价专业委员会&#xff08;下称“专委会”&#xff09;主委单位湖南易能生物医药有限公司&#xf…

划片机的技术分解

划片机是一种切割设备&#xff0c;主要用于将硬脆材料&#xff08;如硅晶圆、蓝宝石基片、LED基片等&#xff09;分割成较小的单元。其工作原理是以强力磨削为划切机理&#xff0c;通过空气静压电主轴带动刀片与工件接触点的划切线方向呈直线运动&#xff0c;将每一个具有独立电…

MVVM模式的具体实现

MVVM即Model-View-ViewModel的简写。即模型-视图-视图模型。 模型&#xff08;Model&#xff09;指的是后端传递的数据。 视图(View)指的是所看到的页面。 视图模型(ViewModel)是mvvm模式的核心&#xff0c;它是连接view和model的桥梁。 它有两个方向&#xff1a; 一是将视图(V…

概率论的学习和整理18:为什么 P(至少成功1次) = Σ P(几何分布) ,总结几何分布和连续失败概率的关系,二项分布和累计成功k次的关系

目录 1 先说结论&#xff1a; 2 Σ几何分布的P(xn) P(n次试验至少成功1次) 2.1 几何分布的概率 2.2 这个是可以证明的&#xff0c;下面是推导过程 2.3 怎么理解呢&#xff1f; 3 另外&#xff0c;P(累计成功k次) ΣP(成功k次的二项分布) 3.1 成功k次的概率 和 累计成…

回收站怎么看当天删除的文件?在回收站中找不到被删除文件怎么回事

在日常使用电脑的过程中&#xff0c;我们常常会遭遇删除文件的错误&#xff0c;这时回收站就像是一剂“后悔药”。然而&#xff0c;当回收站中堆积了许多已删除的文件时&#xff0c;我们如何才能找到当天删除的文件呢&#xff1f;如果回收站在这时无法提供文件&#xff0c;我们…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章&#xff1a;本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

Python应用实例(二)数据可视化(一)

数据可视化&#xff08;一&#xff09; 1.安装Matplotlib2.绘制简单的折线图2.1 修改标签文字和线条粗细2.2 矫正图形2.3 使用内置样式2.4 使用scatter()绘制散点图并设置样式2.5 使用scatter()绘制一系列点2.6 自动计算数据2.7 自定义颜色2.8 使用颜色映射2.9 自动保存图表 数…

Visual Studio 自定义的颜色字体不生效

问题描述&#xff1a; 1、dll1中引用第三方库的类不识别&#xff0c;颜色黑白&#xff0c;自定义颜色不生效&#xff1b;定义的是结构体 2、在dll2引用另一个dll1中的结构体。结构体不识别&#xff0c;今天成员函数cpp中自定义颜色不生效。 问题解决方式&#xff1a; 全部清…

【MySQL备份与还原、索引、视图】练习

一、备份与还原 /***************************样例表***************************/CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Lear…

ArrayUtil java

文档&#xff1a;ArrayUtil.note 链接&#xff1a;http://note.youdao.com/noteshare?id36896c50b63c788468746a5e32cd0554&sub18EC1C3C5721449CBB8B022BDCBBB6D9 添加链接描述 package top.starp.util;//import netscape.javascript.JSObject;import java.util.List;pub…

Debezium同步之限制目标端数据库写入条数

前言 当我们用debezium进行数据同步 目标端数据库为关系型数据库的时候&#xff0c;源端数据库产生的数据量比较多&#xff0c;当Kakfa抽取过来的数据 大批量同步到目标库数据库的时候&#xff0c;会造成写入条数的拥挤。此事我们需要 在目标端json文件配置限制写入条数。 jso…

macOS 14 Sonama - 小记

文章目录 Sonoma 官方资讯关于 Sonama 命名关于 壁纸Sonoma 官方资讯 macOS Sonoma Preview https://www.apple.com/hk/en/macos/sonoma-preview/官方视频介绍 Apple Events --> Watch the Keynote --> 00:43:13 (约14min) https://www.apple.com/hk/en/apple-events/mac…

树莓派使用Nginx 搭建轻量级网站远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 转载自cpolar极点云文章&#xff1a;树莓派使用Nginx 搭建轻量级网站远程访问 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#…

YOLOv5/v7 添加注意力机制,30多种模块分析⑦,CCN模块,GAMAttention模块

目录 一、注意力机制介绍1、什么是注意力机制?2、注意力机制的分类3、注意力机制的核心二、CCN模块1、CCN模块的原理2、实验结果3、应用示例三、GAMAttention模块1、GAMAttention模块的原理2、实验结果3、应用示例大家好,我是哪吒。 🏆本文收录于,目标检测YOLO改进指南。…

k8s 容器实例command 巧用

说明&#xff1a; 很多时候我不想重新构建镜像&#xff0c;并且想要将完成shell脚本而不仅仅是简单的命令作为k8s容器实例command参数输入并且执行。可以借鉴comfigmap的写法使用管道符来输入一个完整的的文件内容。在k8s容器环境&#xff0c;更加适合使用定时任务定时执行一段…

maven install时报错 Cannot run program “java”

在 /usr/bin 查看有没有java的命令 没有则创建软连接&#xff1a; sudo ln -s /media/hygd/Data/jdk/linux/jdk/jdk/jdk1.8.0_131/bin/java java 路径需要换成自己jdk路径 附&#xff1a;linux配置java和maven和tomcat环境变量 /etc/profile增加 export MAVEN_HOME/media/hyg…

R语言FD包中的maxent函数怎么用

R语言是一种流行的统计分析和数据可视化工具&#xff0c;提供了许多强大的包来支持各种分析任务。其中&#xff0c;FD包&#xff08;Functional Data Analysis&#xff09;是一个用于函数型数据分析的包。在FD包中&#xff0c;maxent函数是用于最大熵估计的函数。本文将介绍如何…

2023年iOS App Store上架流程详解(上)

目录 1.注册开发者账号 2.登录并配置人员 3.申请证书和配置文件 一.证书管理​ 二.新建证书​ 三.使用appuploader服务同步证书​ 1&#xff09;申请证书 2&#xff09;添加Identifiers和配置App ID 3&#xff09;申请配置文件 1.在Xcode项目中配置签名 2.上传应用包…

Web3的2048,Sui 8192能否打开全链游戏的大门?

作者&#xff1a;Peng SUN&#xff0c;Foresight News Sui 8192&#xff1a;一局游戏就是一个NFT Sui 8192智能合约基于Move语言编写&#xff0c;构成非常简单&#xff0c;包括游戏、Game Board与排行榜&#xff08;Leaderboard&#xff09;三部分&#xff0c;覆盖方块移动、…

前端Vue自定义可自由滚动新闻栏tabs选项卡标签栏标题栏组件

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…