Yet another object-relational mapping plugin for Egg, which is based on Leoric.
$ npm i --save egg-orm
$ npm install --save mysql    # MySQL or compatible dialects
# Or use other database backend.
$ npm install --save pg       # PostgreSQL
$ npm install --save sqlite3  # SQLiteWith egg-orm you can define models in app/model in JavaScript:
// app/model/user.js
module.exports = function(app) {
  const { Bone, DataTypes: { STRING } } = app.model;
  return class User extends Bone {
    static table = 'users'
    static attributes = {
      name: STRING,
      password: STRING,
      avatar: STRING(2048),
    }
  });
}or in TypeScript:
// app/model/post.ts
import { Column, Bone, BelongsTo, DataTypes } from 'egg-orm';
import User from './user';
export default class Post extends Bone {
  @Column({ primaryKey: true })
  id: bigint;
  @Column(DataTypes.TEXT)
  content: string;
  @Column()
  description: string;
  @Column()
  userId: bigint;
  @BelongsTo()
  user: User;
}
// app/model/user.ts
import { Column, Bone, HasMany } from 'egg-orm';
import Post from './post';
export default class User extends Bone {
  @Column({ allowNull: false })
  nickname: string;
  @Column()
  email: string;
  @Column()
  createdAt: Date;
  @HasMany()
  posts: Post[];
}and use them like below:
// app/controller/home.js
const { Controller } = require('egg');
module.exports = class HomeController extends Controller {
  async index() {
    const users = await ctx.model.User.find({
      corpId: ctx.model.Corp.findOne({ name: 'tyrael' }),
    });
    ctx.body = users;
  }
};Firstly, enable egg-orm plugin:
// config/plugin.js
exports.orm = {
  enable: true,
  package: 'egg-orm',
};Secondly, configure the plugin accordingly:
// config/config.default.js
exports.orm = {
  client: 'mysql',
  database: 'temp',
  host: 'localhost',
  baseDir: 'model',
};In this example above, we're accessing the temp database of MySQL via localhost with the models defined in directory app/model. For more information, please refer to Setup Leoric in Egg.