一个命令生成一个模块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站/抖音:写代码的产品飞哥
--分享运营真实案例,用编程创造自己的产品