命令生成所有数据库表模型以及 CRUD
将下列代码写到文件复制到项目 console\controller
目录下:
<?php
namespace console\controllers;
use Yii;
use yii\console\Controller;
use yii\gii\CodeFile;
use yii\helpers\Console;
use yii\gii\generators\model\Generator;
use yii\gii\generators\crud\Generator as CrudGenerator;
class AutoGiiController extends Controller
{
/**
* 不创建模型的表
* @var array
*/
public $blackModelTables = [
'auth_assignment',
'auth_item',
'auth_item_child',
'auth_rule',
'banner',
'menu',
'member',
'user',
'miniProgram',
'region',
];
/**
* 不创建的crud的table 黑名单
* @var array
*/
public $blackCrudTables = [
'auth_assignment',
'auth_item',
'auth_item_child',
'auth_rule',
'banner',
'menu',
'member',
'user',
'miniProgram',
'region',
];
/**
* 生成所有 model
* actionModel
* @throws \yii\base\NotSupportedException
*/
public function actionModel()
{
$tables = Yii::$app->db->getSchema()->tableNames;
foreach ( $tables as $table ) {
if(in_array($table,$this->blackModelTables)){
continue;
}
try {
$generator = new Generator();
//配置模板
$generator->templates = [
'Absolute' => Yii::getAlias('@backend/components/giiTemplate/Absolute/model/default')
];
$generator->baseClass = '\common\models\BaseActiveRecord'; //父类文件
$generator->template = 'Absolute'; //模板
$generator->queryNs = 'common\models'; //命名空间
$generator->ns = 'common\models'; //命名空间
$generator->modelClass = $this->formatTableName($table); //格式化类名
$generator->tableName = $table;
$files = $generator->generate();
$n = count($files);
if ( $n === 0 ) {
$this->stdout("\n {$table} 没有文件要生成.", Console::FG_RED);
continue;
}
/** @var CodeFile $file */
foreach ( $files as $file ) {
$file->getRelativePath();
$this->writeContentFile($file->path, $file->content);
}
} catch ( \Exception $e ) {
$this->stdout("\n {$table} 生成失败.". "\n", Console::FG_RED);
$this->stdout("\n" . $e->getTraceAsString() . "\n", Console::FG_RED);
$this->stdout("\n" . $e->getMessage() . "\n", Console::FG_RED);
break;
}
}
}
/**
* 格式化表名
* formatTableName
* @param $tableName
* @return mixed
*/
protected function formatTableName($tableName)
{
$tableName = str_replace('_', ' ', $tableName);
$tableName = str_replace('-', ' ', $tableName);
$tableName = ucwords($tableName);
return str_replace(' ', '', $tableName);
}
/**
* 生成所有 crud
* actionCrud
* @throws \yii\base\NotSupportedException
*/
public function actionCrud()
{
$tables = Yii::$app->db->getSchema()->tableNames;
foreach ( $tables as $table ) {
if(in_array($table,$this->blackCrudTables)){
continue;
}
try {
$generator = new CrudGenerator();
$generator->templates = [
'Absolute' => Yii::getAlias('@backend/components/giiTemplate/Absolute/crud/default'),
];
$tableName = $this->formatTableName($table);
$this->writeModelFile($tableName);
$generator->template = 'Absolute'; //模板
$generator->modelClass = "backend\models\\".$tableName; //模型类
$generator->controllerClass = "backend\controllers\\".$tableName."Controller"; //控制器名称
$generator->viewPath = $this->formatViewPath($tableName); //视图路径
$generator->baseControllerClass = "backend\controllers\\BackendController"; //父控制器
$generator->searchModelClass = "backend\models\search\\".$tableName."Search"; //搜索模型名称
$files = $generator->generate();
$n = count($files);
if ( $n === 0 ) {
$this->stdout("\n {$table} 没有文件要生成.", Console::FG_RED);
continue;
}
/** @var CodeFile $file */
foreach ( $files as $file ) {
$file->getRelativePath();
$this->writeContentFile($file->path, $file->content);
}
}catch ( \Exception $e ) {
$this->stdout("\n {$table} 生成失败.". "\n", Console::FG_RED);
$this->stdout("\n" . $e->getTraceAsString() . "\n", Console::FG_RED);
$this->stdout("\n" . $e->getMessage() . "\n", Console::FG_RED);
break;
}
}
}
/**
* 格式视图路径名称
* formatViewPath
* @param $tableName
* @return bool|string
* @throws \Exception
*/
protected function formatViewPath($tableName)
{
$dir = Yii::getAlias("@backend/views/".strtolower(preg_replace('/((?<=[a-z])(?=[A-Z]))/', '-', $tableName)));
if (!is_dir($dir)) {
$mask = @umask(0);
$result = @mkdir($dir, 0777, true);
@umask($mask);
if (!$result) {
throw new \Exception("Unable to create the directory '$dir'.");
}
}
return $dir;
}
/**
* writeModelFile
* 复制 父类模型 文件
* @param $tableName
* @throws \Exception
*/
protected function writeModelFile($tableName)
{
$backendModelFile = Yii::getAlias("@backend/models/".$tableName.".php");
if(!is_file($backendModelFile)){
$content = <<<PHP
<?php
namespace backend\models;
use Yii;
class {$tableName} extends \common\models\\{$tableName}
{
}
PHP;
$this->writeContentFile($backendModelFile,$content);
}
}
/**
* writeContentFile
* @param $file
* @param $content
* @throws \Exception
*/
protected function writeContentFile($file,$content)
{
if (@file_put_contents($file, $content) === false) {
throw new \Exception("写入文件到 '{$file}' 错误.");
}
$mask = @umask(0);
@chmod($file, 0666);
@umask($mask);
$this->stdout("\n 生成文件 {$file} 成功 \n", Console::FG_GREEN);
}
}
执行命令:
//创建model
php yii auto-gii/model //创建crud
php yii auto-gii/crud
创建的model说明:只是在common下生成,并且继承自己重写 \yii\db\ActiveRecord
的父类模型文件 BaseActiveRecord
, 创建crud,在backend的model目录写一个模型文件继承 common\model
目录下的模型文件。自己使用要根据业务需求更改 没做命令行匹配,改的频率很低,代码都有注释。 效果:
命令生成所有数据库表模型以及 CRUD的更多相关文章
- EF 控制code-first生成的数据库表名的单复数
原地址:https://blog.csdn.net/winnyrain/article/details/51248410 在Code-First中,默认生成的数据库表的名称为类型的复数形式,如Mode ...
- JAVA 自动生成对应数据库表的JPA代码工具
http://blog.csdn.net/zheng2008hua/article/details/6274659 关键词:JPA 数据库表代码自动生成,JPA代码生成 自动生成对应数据库表的 ...
- 使用PD(PowerDesigner)图如何快速生成创建数据库表的SQL脚本
打开PD软件: 1.新建概念模型(conceptual Data Model) File-->New Model-->Conceptual Data Mode 或者点击工作区,右键--&g ...
- Excel生成Oracle数据库表sql工具类
1.解决问题: 开发文档中字段比较多的时候,建表sql(Oracle下划线命名规范)比较麻烦,容易出错~~ (主要是懒) 特意手写一个工具,根据excel字段,生成建表的sql语句. ~~~末尾附Gi ...
- 02 . 02 . Go之Gin+Vue开发一个线上外卖应用(集成第三方发送短信和xorm生成存储数据库表)
集成第三方发送短信 介绍 用户登录 用户登录有两种方式: 短信登录,密码登录 短信登录是使用手机号和验证码进行登录 短信平台 很多云平台,比如阿里云,腾讯云,七牛云等云厂商,向程序开发者提供了短信验证 ...
- 用sql语句生成sqlserver数据库表的数据字典
THEN O.name ELSE N'' END, 表描述 THEN PTB.[value] END,N''), 字段序号=C.column_id, 字段名称=C.name, 字段描述=ISNULL( ...
- PowerDesigner逆向生成MYSQL数据库表结构总结
由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1. 安装MYSQL的ODBC驱动 Connector/ODBC 5.1.1 ...
- 用T4模版生成对应数据库表的实体类
<#@ template debug="false" hostspecific="false" language="C#" #> ...
- mysql cmd命令行 创建数据库 表 基础语句
一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1. 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u roo ...
随机推荐
- 更改TestStep的request header和获取TestStep的response header
更改TestStep的request header for example def userId = "xxxxxxxxxxxxx" def request = context.t ...
- SQLite3的MFC使用
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,支持跨平台,操作简单,能够使用很多语言直接创建数据库.官方网站:www.sqlite.org 在VC环境下编写连接SQLite的 ...
- Spring MVC流程
这是spring mvc框架结构图,图片是很早在网上撸过来的,具体在哪忘了…… 早期学习Springmvc 并没有具体了解过,只知道这样用很爽,最近了解下基本结构流程及组件所在…… 执行流程 Spri ...
- selenium+python启动浏览器出错,安装浏览器驱动
WebDriver 支持 Firefox (FirefoxDriver).IE (InternetExplorerDriver).Opera (OperaDriver) 和 Chrome (Chrom ...
- C语法简单测试
1.未初始化的枚举变量 /* uninitialized-enum.c */ #include <stdio.h> , black, blue}; int main(void) { enu ...
- jQuery 的自定义事件
jQuery 中,想要自动触发自定义事件,必须满足2个条件: 1.事件必须是通过on 来绑定的. 2.事件必须是通过trigger / triggerHandler 来触发. 格式如下: $(fun ...
- linux的ls命令中文件颜色含义
linux命令ls会显示出文件的颜色, 系统约定的默认颜色含义如下: 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝色:链接文件 主要是使用ln命令建立的文件 红色 ...
- Django中Form验证
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一,Form验证 第一种操作:主要是这三个函数 ...
- Vue语法学习第二课——指令
指令,是指在Vue中,带有-v前缀的特殊特性 指令特性的值预期是单个JavaScript表达式(v-for例外) <p v-if="seen">看得到</p> ...
- 机器学习笔记(四)Logistic回归模型实现
一.Logistic回归实现 (一)特征值较少的情况 1. 实验数据 吴恩达<机器学习>第二课时作业提供数据1.判断一个学生能否被一个大学录取,给出的数据集为学生两门课的成绩和是否被录取 ...