背景
- 使用 migrations 生成数据库。
- 使用的是 egg-sequelize。不使用 egg-sequelize-ts 是因为现有示例太少,且踩了很多坑。
- 使用 references 关联查询,不给数据库加外键约束,不使用sync。
- Sequelize官方中文文档 搜索关键词:[在没有约束的情况下强制执行外键引用
- 查看在egg中如何使用:egg-sequelize官方文档 搜索关键词:Associate
- 使用TypeScript(但方法也适用于JavaScript)。
开始
我有三个表,users用户,articles文章,groups用户群组。有两个一对多的关系: 用户群组-用户,用户-文章。
要实现查找文章接口,返回用户名,用户头像,群组名等信息。
model/user.ts
import {
Application } from 'egg';
module.exports = (app: Application) => {
const {
STRING, INTEGER, DATE } = app.Sequelize;
const User = app.model.define('users', {
id: {
type: INTEGER, primaryKey: true, autoIncrement: true },
name: {
type: STRING(30), allowNull: false, defaultValue: 'normal' },
sex: {
type: INTEGER, allowNull: false, defaultValue: 0 },
age: {
type: INTEGER, allowNull: false, defaultValue: 0 },
mobile: {
type: STRING(16), allowNull: false, defaultValue: 'normal' },
password: {
type: STRING(32), allowNull: false, defaultValue: 'normal' },
avatar: {
type: STRING(256), allowNull: false, defaultValue: 'normal' },
mail: {
type: STRING(64), allowNull: false, defaultValue: 'normal' },
currentAuthority: {
type: STRING