引言

本小节,我们学习项目中常见的多表关联查询,比如查询用户是什么角色?每个用户对应什么角色?某个角色下有多少个所属用户?

表结构和数据调整:
角色表结构
角色表数据
用户表结构
用户表数据

完善role model配置

新增db/model/role.js

/** * 角色表 */ var Sequelize = require('sequelize'); var {sequelize} = require('../sequelize.js'); var role = sequelize.define('role',{ id: { type: Sequelize.BIGINT(20), primaryKey: true, allowNull: false, unique: true, autoIncrement: true }, role: Sequelize.STRING(255), // 名字 description: Sequelize.STRING(255), // 描述 create_time: Sequelize.DATE, update_time: Sequelize.DATE },{ timestamps: false, // 不要默认时间戳 数据库没有时间戳字段时,设置为false,否则报错 SequelizeDatabaseError: Unknown column 'createdAt' in 'field list' freezeTableName: true }); module.exports = role;

db/model/user.js model里面增加rid字段

一对一查询每个用户对应角色

const roleAssociation = userDB.hasOne(roleDB, { sourceKey: 'rid', foreignKey: 'id', as: 'role' }) router.get('/info', async (req, res) => { const params = req.body; if(!params.id){ utils.sendError(res, '用户ID不能为空') return } let data = await userDB.findOne({ raw: true, where: { id: params.id }, include: [{ attributes: ['id', 'role', 'description'], association: roleAssociation }] }) res.send({ code: 200, data: data }) })

association用于指定模型于模型之间的关系,比如这里我们指定userrole是一对一关系。