FastAdmin CRUD 代码生成器使用指南：一键生成增删改查
前言FastAdmin 的 CRUD 代码生成器是框架最核心的功能之一——只需要一条命令，就能根据数据库表结构自动生成控制器、模型、视图、JS、验证器和菜单，实现完整的增删改查。本文将全面讲解 CRUD 生成器的使用方法和进阶技巧。一、基础用法1.1 准备数据表先创建一张示例表：CREATE TABLE `fa_article` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题', `content` text COMMENT '内容', `category_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分类ID', `author` varchar(50) NOT NULL DEFAULT '' COMMENT '作者', `status` enum('normal','hidden') NOT NULL DEFAULT 'normal' COMMENT '状态', `views` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '浏览量', `createtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', `updatetime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';1.2 一键生成 CRUDphp think crud -t fa_article -c content/article参数说明：参数说明-t数据表名（带前缀）-c控制器路径，格式为 模块/控制器执行后自动生成以下文件：application/admin/controller/content/Article.php application/admin/model/Article.php application/admin/validate/Article.php application/admin/view/content/article/index.html application/admin/view/content/article/add.html application/admin/view/content/article/edit.html application/admin/view/content/article/recyclebin.html public/assets/js/backend/content/article.js1.3 生成菜单php think menu -c content/article执行后在后台菜单管理中会自动出现"文章管理"菜单。二、字段注释驱动生成FastAdmin 的 CRUD 生成器会读取数据库字段注释来决定前端控件的渲染方式。这是最强大的特性之一：2.1 字段注释格式`status` enum('normal','hidden') NOT NULL DEFAULT 'normal' COMMENT '状态:normal=正常,hidden=隐藏'生成器会解析注释中的 normal=正常,hidden=隐藏，自动渲染为下拉选择框： 正常 隐藏 2.2 常用字段类型映射数据库字段类型自动生成的控件varchar文本输入框text富文本编辑器int（含 time 关键字）日期时间选择器enum下拉选择框decimal数字输入框date日期选择器2.3 特殊字段名约定FastAdmin 对特定字段名有特殊处理：字段名自动行为createtime / updatetime自动维护创建/更新时间status列表页显示状态切换按钮weigh自动添加拖拽排序功能image / images自动生成图片上传组件file / files自动生成文件上传组件ids生成多选关联组件三、进阶用法3.1 关联模型生成如果表中有外键字段，可以通过命名约定自动生成关联：-- 主表 CREATE TABLE `fa_category` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 从表 CREATE TABLE `fa_article` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL DEFAULT '', `category_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分类ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;在模型中定义关联：// application/admin/model/Article.php namespace app\admin\model; use think\Model; class Article extends Model { // 关联分类 public function category() { return $this->belongsTo('Category', 'category_id', 'id'); } }在控制器中启用关联查询：// application/admin/controller/content/Article.php public function index() { $this->relationSearch = true; $this->searchFields = 'id,title,category.name'; // 设置关联 $this->with = ['category']; return parent::index(); }3.2 强制覆盖生成php think crud -t fa_article -c content/article -f 1-f 1 参数会覆盖已存在的文件，适合修改表结构后重新生成。3.3 删除生成的文件php think crud -t fa_article -c content/article -d 1-d 1 参数会删除该表对应的所有 CRUD 文件。四、自定义模板4.1 修改生成模板CRUD 模板位于 extend/fast/crud/tpl/ 目录：extend/fast/crud/tpl/ ├── controller.tpl # 控制器模板 ├── model.tpl # 模型模板 ├── validate.tpl # 验证器模板 ├── index.tpl # 列表视图模板 ├── add.tpl # 添加视图模板 ├── edit.tpl # 编辑视图模板 └── javascript.tpl # JS 模板4.2 自定义列表字段显示在 JS 文件中控制列表列的显示：// public/assets/js/backend/content/article.js define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) { var Controller = { index: function () { Table.init({ extend: { index_url: 'content/article/index', add_url: 'content/article/add', edit_url: 'content/article/edit', del_url: 'content/article/del', table: 'article', } }); var table = $("#table"); // 初始化表格 table.bootstrapTable({ url: $.extend({}, Table.config.url), columns: [ [ {checkbox: true}, {field: 'id', title: __('Id')}, {field: 'title', title: __('Title')}, {field: 'category.name', title: __('Category')}, {field: 'author', title: __('Author')}, {field: 'status', title: __('Status'), searchList: {"normal": __('Normal'), "hidden": __('Hidden')}, formatter: Table.api.formatter.status}, {field: 'views', title: __('Views')}, {field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime}, {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} ] ] }); Table.api.bindevent(table); }, add: function () { Controller.api.bindevent(); }, edit: function () { Controller.api.bindevent(); }, api: { bindevent: function () { Form.api.bindevent($("form[role=form]")); } } }; return Controller; });五、CRUD 常用参数汇总参数说明示例-t数据表名（带前缀）-t fa_user-c控制器路径-c user/index-f强制覆盖-f 1-d删除生成文件-d 1-o输出文件路径-o /tmp/crud-uURL 绑定的模型-u model_name--local不调用远程 API--local=1六、最佳实践先设计表结构再生成：字段注释直接决定生成质量，务必写清楚生成后不要改生成的文件名：保持命名一致性，便于重新生成自定义逻辑在生成文件基础上修改：先 php think crud 生成骨架，再手动添加业务逻辑修改表结构后重新生成：用 -f 1 覆盖，但注意备份自定义代码善用关联搜索：$this->relationSearch = true 可以快速实现跨表搜索总结FastAdmin CRUD 生成器的核心思想是"约定优于配置"——通过数据库字段注释驱动代码生成，大幅减少重复劳动。掌握字段注释规范和关联模型用法后，90% 的后台增删改查功能可以在几分钟内完成。