引言
本小节,我们学习项目中常见的多表关联查询,比如查询用户是什么角色?每个用户对应什么角色?某个角色下有多少个所属用户?
表结构和数据调整:
完善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
用于指定模型于模型之间的关系,比如这里我们指定user
和role
是一对一关系。
解锁全文需支付¥3.00,点击支付
正文结束
Ctrl + Enter