orm

Nodejs+ Sequelize多表关联高级查询

特别声明:如果您喜欢小站的内容,可以点击 终身VIP¥188.00元 包年VIP¥88.00元 包季VIP¥28.00 包月VIP¥10.00元 进行全站阅读。 如果您对付费阅读有任何建议或想法,欢迎发送邮件至: 864479410@qq.com,或添加QQ:864479410(^_^)

引言

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

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

完善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是一对一关系。

更多精彩内容,可以点击“立即支付”,查看隐藏内容哦!

内容查看价格3立即支付    升级VIP后免费升级VIP,支付前请先登录,支付前请先登录,支付前请先登录!
本站资源一次收费,永久下载!发现资源失效,联系站长恢复即可!由于源码具有可复制性、可传播性,一经购买,概不退货,购买前请再三确认!本站提供相关技术支持,网站底部联系即可。时间:周一 ~ 周五 9:30-18:00。谢谢合作!

VIP用户所有收费资源免费,登录后左上角点击 昵称 ,进入用户中心充值成为VIP会员!如果您已经登录,点击这里成为尊贵VIP用户!

(0)

本文由 Web秀 作者:Javan 发表,转载请注明来源!

热评文章

发表评论

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