一个命令生成一个模块CRUD功能

1分钟生成一个功能模块

作为这个教程的开篇,先化一分钟来感受一下快速开发框架的魅力。快,就是fastflow行走江湖的名片。
真的很快,生成的模块具备增删查改、排序、回收站等功能。以下是操作步骤。

step1: 创建表

使用数据库工具在fastadmin的数据库里执行如下的脚本创建这个表。
表的字段的命名有一些约定,会影响到生成代码的逻辑。这个我们后续的课程再来讲解。

DROP TABLE IF EXISTS fa_c1001_project;
CREATE TABLE fa_c1001_project(
    id INT(8) NOT NULL AUTO_INCREMENT  COMMENT '主键' ,
    parent INT(8) NOT NULL  DEFAULT 0 COMMENT '父项目' ,
    name VARCHAR(128) NOT NULL   COMMENT '项目名称' ,
    code VARCHAR(32) NOT NULL   COMMENT '项目编码' ,
    pri enum('1','2','3','4')   DEFAULT '1' COMMENT '优先级' ,
    `beginTime` datetime    COMMENT '开始时间' ,
    `endTime` datetime    COMMENT '结束时间' ,
    realBeganTime datetime    COMMENT '实际开始时间' ,
    realEndTime datetime    COMMENT '实际结束时间' ,
    grade tinyint(3)    COMMENT '等级' ,
    `desc` mediumtext    COMMENT '项目描述' ,
    status enum('wait','doing','closed','suspended','undone')    COMMENT '项目状态:wait=等待,doning=进行中,closed=关闭,suspended=挂起,undone=取消' ,
    createdBy  VARCHAR(32)   COMMENT '创建人' ,
    createtime datetime    COMMENT '创建时间' ,
    updatedBy VARCHAR(32)    COMMENT '更新人' ,
    updatetime datetime    COMMENT '更新时间' ,
    deletedBy VARCHAR(255)    COMMENT '删除人' ,
    deletetime datetime    COMMENT '删除时间' ,
    deleted enum('0','1')   DEFAULT '0' COMMENT '是否删除:0=否,1=是' ,  
    weigh INT(8) NOT NULL  DEFAULT 0 COMMENT '排序号' ,
    PRIMARY KEY (id)
)  COMMENT = '项目';

step2: 执行CRUD命令,并自动创建菜单

拷贝fastadmin的安装目录下think所在的目录
输入图片说明
cd 命令进入到这个目录

输入图片说明
然后命令行定位到think文件所在的文件夹
执行:php think crud -t c1001_project -c studycase/c1001project -u 1 --force=true
输入图片说明

step3: 微调生成的代码

model 文件里修改:修改一行,增加一行,否则自动填充的时间值入库时会报错:

// 自动写入时间戳字段,edit by tonny : integer->datetime
protected $autoWriteTimestamp = 'datetime';
//add by tonny: 生成的代码里增加这个行。
protected $dateFormat = 'Y-m-d H:i:s';

输入图片说明

step4: 检测已生成的功能模块的功能

将会看到这个菜单,一个“项目”的增删查改功能都已经生成:

输入图片说明

可能遇到的问题

提示执行php -v时提示php不存在

解决办法:
找到宝塔下php的安装目录,找到php.exe的所在目录,拷贝下来,在环境变量path中先添加 php 的Path:
输入图片说明
保存后,在命令行执行 php -v 来验证。如果php是安装好了的,显示这样的效果:
输入图片说明

报错:exec()has been disabled for security reasons

输入图片说明
解决办法:
到宝塔上去解除禁用,如下,删除这条:

输入图片说明

再执行一次,可能提示已经存在,按提示在后面增加 --force=true 再执行一次就成功了
输入图片说明

Primary key not found

D:2.workfastadminfastadmin>php think crud -t yhnick -u 1
[thinkException]
Primary key not found!
解决办法:原来表一定要设置一个主键,让这个表的某个字段设置为主键。

生成的内容可能是不符合需要的,如果要调整,可参考

https://www.jianshu.com/p/63cc8673ba9d

创建时间的自动赋值时类型不匹配报错

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '1533267332' for column 'createtime' at row 1
解决办法:
生成的代码做如下的两个处理

 // 自动写入时间戳字段,add by tonny 20231125: integer->datetime
 protected $autoWriteTimestamp = 'datetime';
 //add by tonny 20231125: 生成的代码里增加这个行。
 protected $dateFormat = 'Y-m-d H:i:s';

生成代码后再来生成,会覆盖原来的

所以,建议在前面模型就要设计好,否则后面再增加字段或调整类型,就要手工来添加代码了。

--B站/抖音:写代码的产品飞哥

--分享运营真实案例,用编程创造自己的产品