egg.js 快速创建表模型

  • 安装
npm install –save egg-sequelize mysql2
  • 在 config/plugin.js 中引入 egg-sequelize 插件
exports.sequelize = {
enable: true,
package: ‘egg-sequelize’,
};
  • 在 config/config.default.js 中编写 sequelize 配置
config.sequelize = {
dialect: ‘mysql’,
host: ‘127.0.0.1’,
port: 3306,
database: ‘egg-sequelize-doc-default’,
};
  • 安装 sequelize-cli
npm install –save-dev sequelize-cli

在 egg 项目中,我们希望将所有数据库 Migrations 相关的内容都放在 database 目录下,所以我们在项目根目录下新建一个 .sequelizerc 配置文件:

‘use strict’;

const path = require(‘path’);

module.exports = {
config: path.join(__dirname, ‘database/config.json’),
‘migrations-path’: path.join(__dirname, ‘database/migrations’),
‘seeders-path’: path.join(__dirname, ‘database/seeders’),
‘models-path’: path.join(__dirname, ‘app/model’),
};
  • 初始化 Migrations 配置文件和目录
npx sequelize init:config
npx sequelize init:migrations

这部分来自egg.js官方,需要先配置好基础的这些设置继续下一步

全局安装sequelize-auto命令:
    打开cmd,输入 npm install -g sequelize-auto

安装完成之后执行

sequelize-auto -h localhost -d Database -u username -x password -p 3306 -t Table

选项:
  -h,–host数据库的IP /主机名。[必需]
  -d,–database数据库名称。[必需]
  -u,–user数据库的用户名。
  -x,–pass数据库密码。
  -p,–port数据库的端口号。
  -c,–config用于Sequelize的构造函数“选项”标志对象的JSON文件,如下所示:https://sequelize.readthedocs.org/en/latest/api/sequelize/
  -o,–output用于放置模型的目录。
  -e,-dialect您使用的方言/引擎:postgres,mysql,sqlite
  -a,–additional指向json文件的路径,该文件包含要在模型的配置参数中定义的模型定义(针对所有表)。有关更多信息:https:
  //sequelize.readthedocs.org/en/latest/docs/models-definition/#configuration -t,–tables逗号分隔的导入表名
  -T,–skip-tables逗号-分隔的表名以跳过
  -C,–camel使用驼峰大小写来命名模型和字段
  -n,– no -write防止将模型写入磁盘。
  -s,-schema从中检索表的数据库架构

之后再visual studio code 代码片段中编辑

{
	// Place your snippets for javascript here. Each snippet is defined under a snippet name and has a prefix, body and 
	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the 
	// same ids are connected.
	// Example:
	"egg-sequelize-model": {
		"prefix": "em",
		"body": [
            "'use strict';",
            "",
            "const moment = require('moment');",
            "module.exports = app => {",
            "const DataTypes = app.Sequelize;",
            "const $1 = app.model.define('$1', {",
            "}, {",
            "tableName: '$1', // 表名",
            "freezeTableName: false, // 给表名加复数",
            "timestamps: true, // 启用时间戳",
            "paranoid: true, // 开启假删除",
            "underscored: true, //将自动设置所有属性的字段参数为下划线命名方式.",
            "});",
            "return $1;",
            "};"
		],
		"description": "快速重建model"
    },
    "egg-sequelize-model-getmoment": {
		"prefix": "emm",
		"body": [
            "get() { return this.getDataValue('$1') == null ? null : moment(this.getDataValue('$1')).format('YYYY-MM-DD HH:mm:ss'); }"
		],
		"description": "egg-model获取正确的时间"
    }
    
}

稍作修改成

/* jshint indent: 2 */

'use strict';
const moment = require('moment');
module.exports = app => {
    const DataTypes = app.Sequelize;
    const erya = app.model.define('erya', {
        id: {
            type: DataTypes.INTEGER(11).UNSIGNED,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        nick: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        phone: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        pic: {
            type: DataTypes.STRING(255),
            allowNull: true
        },
        schoolname: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        uid: {
            type: DataTypes.INTEGER(10),
            allowNull: true
        },
        uname: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        email: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        sex: {
            type: DataTypes.INTEGER(2),
            allowNull: true,
            defaultValue: '0'
        },
        created: {
            type: DataTypes.INTEGER(13),
            allowNull: true
        },
        uuid: {
            type: DataTypes.STRING(100),
            allowNull: true
        },
        fullpinyin: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        dxfid: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        type: {
            type: DataTypes.STRING(50),
            allowNull: true
        },
        simplepinyin: {
            type: DataTypes.STRING(10),
            allowNull: true
        },
        puid: {
            type: DataTypes.INTEGER(10),
            allowNull: true
        },
        rights: {
            type: DataTypes.INTEGER(10),
            allowNull: true
        },
        ppfid: {
            type: DataTypes.INTEGER(10),
            allowNull: true
        },
        status: {
            type: DataTypes.INTEGER(3),
            allowNull: true
        },
        modified: {
            type: DataTypes.INTEGER(11),
            allowNull: true
        },
        activated: {
            type: DataTypes.INTEGER(2),
            allowNull: true
        },
        fid: {
            type: DataTypes.INTEGER(10),
            allowNull: true
        }
    }, {
        tableName: 'erya'
    });
}, {
    tableName: 'erya', // 表名
    freezeTableName: false, // 给表名加复数
    timestamps: true, // 启用时间戳
    paranoid: false, // 开启假删除
    underscored: true, //将自动设置所有属性的字段参数为下划线命名方式.
};

发表评论

电子邮件地址不会被公开。 必填项已用*标注