ulthon_admin v2.0.19 发布,PHP 后台快速开发框架

本次发行版中,优化了底层建设的代码,并实现了一个强大的特性(对我来说如此):

  • 从数据库生成数据库迁移代码

用法

什么是数据库迁移工具

ulthon_admin标准的安装流程是使用数据库迁移工具进行安装,他不仅可以安装到mysql数据库,也支持sqlitesqlserver等其它数据库。

具体用法参考文档:

https://www.kancloud.cn/manual/thinkphp6_0/1118028

但一般而言,我们开发中不会从写迁移代码开始,而是直接使用顺手的数据库工具(Dbeaver、Navcat等)设计数据库,然后在开发中修修补补。

这并没有什么不妥,但是如果你做的是一个标准产品,需要经常执行安装和更新,需要给多个客户部署时,就会感到吃力。

遇到这种情况,你只能从一个数据库导出,再导入到另一个数据库,反反复复的操作。还有可能不知道哪个是最新的,哪个需要更新,哪个更新到哪个版本了。

另一方面,如果数据库丢失了,而你手里又没有及时备份,那么也是很头疼的事。

数据库迁移工具就是为了解决以上种种问题的,比如我们需要新建一张test_goods数据表,我们可以使用数据库迁移工具,写出这样的代码:

<?php

use think\migration\Migrator;
use think\migration\db\Column;

class TestGoods extends Migrator
{
    public function change()
    {
        $table = $this->table('test_goods')
            ->setComment('商品列表')
            ->addColumn('cate_id', 'biginteger', ['limit' => '20', 'signed' => '0', 'null' => '0', 'default' => '0', 'comment' => '分类ID {relation} (table:mall_cate,relationBindSelect:title)',])
            ->addColumn('title', 'char', ['limit' => '20', 'null' => '0', 'default' => '', 'comment' => '商品名称',])
            .......
            ->addColumn('detail', 'text', ['null' => '1', 'comment' => '详情',])
            ->addIndex('uid', ['unique' => true])
            ->addIndex('detail', ['type' => 'fulltext'])
            ->addIndex('cate_id')
            ->create();
    }
}

 

然后运行命令:

php think migrate:run
 

此时这张表就出现在我们的数据库了,至于其他的表,并不会覆盖或丢失。

这样有很多好处:

  • 数据库跟随版本库存储不会丢失
  • 没有反复多余的导出数据库
  • 可以安装到“任何数据库”
  • 任何标准产品都可以任意运行该命令用于升级数据库

但是我们开发的时候,不会直接写数据迁移工具,而是从设计表开始。如果我们需要数据库迁移工具,就只能照着现在的数据表写迁移工具,这是以前的做法,也只能这样做。但是现在不一样了,通过一行命令可以一键生成数据库迁移的代码。就像生成curd那样。

现在按照我们的介绍看看怎么用吧。

使用

我们先用自己喜欢的方式设计出一张表。

-- admin_demo_ultho.ul_test_goods definition

CREATE TABLE `ul_test_goods` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cate_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '分类ID {relation} (table:mall_cate,relationBindSelect:title)',
  `title` char(20) NOT NULL DEFAULT '' COMMENT '商品名称',
  `logo` char(255) NOT NULL COMMENT '商品logo {image}',
  `images` text NOT NULL COMMENT '商品图片 {images}',
  `describe` text NOT NULL COMMENT '商品描述 {editor}',
  `total_stock` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '总库存',
  `sort` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  `status` int(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态 {radio} (0:正常,1:禁用)',
  `cert_file` varchar(100) NOT NULL COMMENT '合格证 {file}',
  `verfiy_file` text NOT NULL COMMENT '检测报告 {files}',
  `remark` char(255) NOT NULL DEFAULT '' COMMENT '备注说明',
  `create_time` int(11) unsigned NOT NULL DEFAULT '0',
  `update_time` int(11) unsigned NOT NULL DEFAULT '0',
  `delete_time` int(11) unsigned NOT NULL DEFAULT '0',
  `publish_time` int(10) unsigned NOT NULL COMMENT '发布日期 {date} (date)',
  `sale_time` bigint(20) unsigned NOT NULL COMMENT '售卖日期 {date} (datetime)',
  `intro` varchar(100) NOT NULL COMMENT '简介 {textarea}',
  `time_status` smallint(5) unsigned NOT NULL COMMENT '秒杀状态 {select} (0:未参加,1:已开始,3:已结束)',
  `is_recommend` tinyint(4) NOT NULL COMMENT '是否推荐 {switch} (0:不推荐,1:推荐)',
  `shop_type` varchar(100) NOT NULL COMMENT '商品类型 {checkbox} (taobao:淘宝,jd:京东)',
  `tag` varchar(100) NOT NULL COMMENT '商品标签 {table} (table:mall_tag,type:checkbox,valueField:id,fieldName:title)',
  `tag_backup` varchar(100) DEFAULT NULL COMMENT '商品标签(单选) {table} (table:mall_tag,type:radio,valueField:id,fieldName:title)',
  `from_area` varchar(100) NOT NULL COMMENT '产地 {city} (name-province:0,code:0)',
  `store_city` varchar(100) NOT NULL DEFAULT '山东省/临沂市' COMMENT '仓库 {city} (level:city)',
  `tag_input` varchar(100) NOT NULL COMMENT '商品标签 (输入) {tag}',
  `uid` varchar(100) NOT NULL COMMENT '唯一id',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格',
  `detail` longtext COMMENT '详情',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ul_test_goods_uid_IDX` (`uid`) USING BTREE,
  KEY `cate_id` (`cate_id`) USING BTREE,
  FULLTEXT KEY `ul_test_goods_detail_IDX` (`detail`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='商品列表';
 

面对这样一张数据表,如果我们要对照写出数据库迁移工具的代码,会很费事,而且很容易就写错了。

但现在时代变了,只需要一行命令

php think curd:migrate -t test_goods
 

此时会在数据库迁移工具的工作目录下生成一个文件:

database\migrations\20220905222557_test_goods.php
 

这跟使用官方的生成方式一致

此时会直接生成开头那样的数据库迁移代码。

结尾

可能你没用过数据库迁移工具,那么目前可能无法引起你的兴趣,(建议使用),如果你正在使用,那么这个命令绝对能给你带来极大的便利。甚至可以让那些拥有几十个数据表的项目,也能轻松地使用数据库迁移工具来安装了。

ulthon_admin正在积极维护,拥有极高的定制性,支持依赖裁剪,精简代码,欢迎使用。

 

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/209320

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。