数据库与CRUD生成

XYGo Admin 2026-04-22 1 次阅读

建表规范、SQL幂等写法、CRUD生成器扩展目标

表命名

所有扩展数据表必须以 xy_{扩展名}_ 为前缀:

复制代码
xy_shop_order          ✓ 正确
xy_shop_product        ✓ 正确
xy_order               ✗ 错误(缺少扩展名前缀)
shop_order             ✗ 错误(缺少 xy_ 前缀)

安装 SQL

install/pgsql.sqlinstall/mysql.sql全新安装时执行,建议使用幂等写法:

sql 复制代码
-- PostgreSQL
CREATE TABLE IF NOT EXISTS xy_shop_order (
    id         bigserial PRIMARY KEY,
    order_no   varchar(64) NOT NULL DEFAULT '',
    status     smallint    NOT NULL DEFAULT 1,
    amount     decimal(10,2) NOT NULL DEFAULT 0,
    created_at bigint      NOT NULL DEFAULT 0,
    updated_at bigint      NOT NULL DEFAULT 0,
    deleted_at bigint      NOT NULL DEFAULT 0
);

CREATE INDEX IF NOT EXISTS idx_shop_order_status ON xy_shop_order(status);
CREATE INDEX IF NOT EXISTS idx_shop_order_deleted_at ON xy_shop_order(deleted_at);

升级 SQL

upgrade/pgsql.sql版本升级时执行。必须使用幂等写法:

sql 复制代码
-- 新增字段
ALTER TABLE xy_shop_order ADD COLUMN IF NOT EXISTS remark varchar(500) DEFAULT '';

-- 新增索引
CREATE INDEX IF NOT EXISTS idx_shop_order_created_at ON xy_shop_order(created_at);

-- 新增表
CREATE TABLE IF NOT EXISTS xy_shop_refund (
    id         bigserial PRIMARY KEY,
    order_id   bigint NOT NULL DEFAULT 0,
    reason     varchar(500) NOT NULL DEFAULT ''
);

-- 新增配置(不覆盖已有值)
INSERT INTO xy_sys_config ("group", "key", "value")
VALUES ('shop', 'payment_timeout', '1800')
ON CONFLICT ("group", "key") DO NOTHING;

卸载 SQL

uninstall/pgsql.sql 在卸载时执行,菜单由安装器自动清理,无需手写:

sql 复制代码
DROP TABLE IF EXISTS xy_shop_order;
DROP TABLE IF EXISTS xy_shop_refund;

CRUD 代码生成器

系统内置的代码生成器支持直接生成代码到扩展目录:

  1. 进入后台 → 开发工具 → 代码生成
  2. 选择数据表后进入第二步"基础配置"
  3. 在"生成目标"下拉中选择已安装的扩展
  4. 所有路径自动切换为扩展目录
  5. 生成的代码直接放入 server/addons/{name}/web/src/addons/{name}/