前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >sequlize 查询时间范围和多表查询

sequlize 查询时间范围和多表查询

作者头像
用户4793865
发布于 2023-01-12 08:57:38
发布于 2023-01-12 08:57:38
2.7K00
代码可运行
举报
文章被收录于专栏:前端小菜鸡yym前端小菜鸡yym
运行总次数:0
代码可运行

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

查询时间范围

between

前端传参时间范围 如:createdAtFrom = '', createdAtTo = '' ,并且在后端接收参数后给的默认值 ''

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 createdAtFrom && (where['createdAt'] = {
         [Op.between]: [createdAtFrom,createdAtTo]
  })

多表查询

首先有两个表

用户表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const { DataTypes } = require('sequelize')
const seq = require('../db/seq')

// 创建模型   可以给表加前缀因为其自动化推断表名称,也可以让他不推断
const User = seq.define('User', {
    // id 自动创建
    username: {
        // 去问档查看
        type: DataTypes.STRING,
        // 约束是否为空
        allowNull: false,
        // 唯一
        unique: true,
        comment: '用户名 唯一'
    },
    password: {
        type: DataTypes.CHAR(64),
        allowNull: false,
        comment: '密码'
    },
    is_admin: {
        // boolean 就是 tinity(1)
        type: DataTypes.INTEGER,
        allowNull: false,
        defaultValue: 0,
        comment: '是否为管理员 0不是管理员'
    },
    user_id:{
        type: DataTypes.INTEGER,
        allowNull: true,
        defaultValue: 0,
        comment: '用户编号'
    },
    user_img:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '头像'
    },
    register_date:{
        type: DataTypes.DATE,
        allowNull: true,
        comment: '注册日期'
    },
    login_date:{
        type: DataTypes.DATE,
        allowNull: true,
        comment: '最近登录日期'
    }
})

用户详情表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const UserDetail = seq.define('UserDetail', {
    user_id:{
        type: DataTypes.INTEGER,
        allowNull: false,
        defaultValue: 0,
        comment: '用户编号',
        unique: true,
    },
    phone:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '手机号'
    },
    job:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '职业'
    },
    tag:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '标签'
    },
    signature:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '座右铭'
    },
    email:{
        type: DataTypes.STRING,
        allowNull: true,
        comment: '邮箱'
    }

})

方法一

这中返回的格式,是将另一个表的数据放到一个对象中的,如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const User = require('../model/user.model')
const UserDeatil = require('../model/user_detail.model')
  • User.belongsTo(关联表名也就是UserDetail,{foreignKey:'User表的外键也就是与UserDetail关联的user_id',targetKey:'目标表的关联键也就是UserDetail的user_id'})
  • include:[{ model:UserDeatil, attributes:['email'] }] attributes也就是我要查UserDetail表中的一些字段
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class UserManageService {

    // 查询所有用户
    async usermanage({ username, is_admin, createdAtFrom,createdAtTo, updatedAtFrom,updatedAtTo, currentPage, pageSize }) {
        User.belongsTo(UserDeatil,{foreignKey:'user_id',targetKey:'user_id'})
        const where = {};
        username && (where['username'] = {
            [Op.like]: username
        })
        is_admin && (where['is_admin'] = {
            [Op.eq]: is_admin
        })
        createdAtFrom && (where['createdAt'] = {
            [Op.between]: [createdAtFrom,createdAtTo]
        })
        updatedAtFrom && (where['updatedAt'] = {
            [Op.between]: [updatedAtFrom,updatedAtTo]
        })
        const { count, rows } = await User.findAndCountAll({
            where,
            offset: (currentPage - 1) * pageSize,
            limit: Number(pageSize),
            include:[{
                model:UserDeatil,
                attributes:['email']
            }]
        });
        return rows ? { data:rows , total:count } : { error: 500 }
    }
}

也可以给这个表起别名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 include:[{
                model:UserDeatil,
                attributes:['email'],
                as:'detail'
            }]

方法二

把上面的对象的数据格式 拍平了

只需要加上 raw: true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 const { count, rows } = await User.findAndCountAll({
            where,
            offset: (currentPage - 1) * pageSize,
            limit: Number(pageSize),
            include: [{
                model: UserDeatil,
                attributes: ['email'],
            }],
            raw: true
        });

方法三

User.belongsTo(UserDeatil,{foreignKey:'user_id',targetKey:'user_id'})这个也需要。

  • Sequelize.col('表名.想要的字段名')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   const { count, rows } = await User.findAndCountAll({
            where,
            offset: (currentPage - 1) * pageSize,
            limit: Number(pageSize),
            attributes: [Sequelize.col('UserDetail.email'), Sequelize.col('UserDetail.phone'), Sequelize.col('UserDetail.job'), Sequelize.col('UserDetail.tag'),
            Sequelize.col('User.username'), Sequelize.col('User.id'), Sequelize.col('User.user_id'), Sequelize.col('User.is_admin'), Sequelize.col('User.user_img'),
            Sequelize.col('User.createdAt'), Sequelize.col('User.updatedAt')],
            include: [{
                model: UserDeatil,
                as: 'UserDetail',
                // 这里为空
                attributes: [],
            } ],
            // 需要
            raw: true
        });
 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
可观测性就是对“监控”的包装?
作者:软件质量保障 知乎:https://www.zhihu.com/people/iloverain1024
互联网金融打杂
2022/08/01
6870
可观测性就是对“监控”的包装?
一文搞懂基于 OpenTelemetry 进行 Kubernetes 全链路观测
Hello folks,我是 Luga,今天我们来聊一下云原生生态核心技术—— 可观测性,即 “基于 OpenTelemetry 进行 Kubernetes 全链路观测” 。
Luga Lee
2023/09/25
4.1K1
一文搞懂基于 OpenTelemetry 进行 Kubernetes 全链路观测
2022 APM工具对比​
调研市面主流APM(Application Performance Management)工具,了解不同工具的优缺点,再结合团队目前遇到的主要问题,选择最合适的一款。
TestOps
2022/12/12
2.9K0
2022 APM工具对比​
15个最好的免费开源监控系统
通过跟踪监控服务器的性能、网络流量、应用程序性能以及用户体验情况,可帮助我们更好地了解整个IT环境运行状态,为系统运维、调优提供支撑。掌握一些好的监控工具可以为我们更好地跟踪服务器状态,持续优化系统提供最佳解决方案。
科控物联
2023/09/29
21.2K0
15个最好的免费开源监控系统
2022 年最佳 15 款监控工具!你不可错过
随着过去几十年企业网络的兴起,以及近年来随着虚拟、云和边缘网络的增加,监控工具已经显得越来越重要。在当今大多数企业中,监控混合 IT 环境中的网络流量对于主动网络管理至关重要。无论是检测行为异常、占用带宽、应对新威胁,还是使用历史数据绘制趋势图,监控工具在未来仍将是必不可少的。
民工哥
2022/10/27
1.5K0
2022 年最佳 15 款监控工具!你不可错过
2024年最佳Kubernetes工具
Kubernetes已经崛起成为容器编排的行业标准,它彻底改变了企业在面向微服务的世界中交付软件的方式。凭借支持各种应用需求和限制的能力,Kubernetes已经成为全球组织的首选。随着越来越多的公司采用Kubernetes,对精通其细节的经验丰富开发者的需求继续增长。但是,成为高效的Kubernetes开发者不仅需要对其概念有扎实的理解,还需要高效工作并最大限度地提高生产力。
云云众生s
2024/03/28
1970
这 30 个工具和服务可以更好地监控和管理 Linux 服务器,很全面!
Linux 服务器的监控是确保其运行正常和高效的关键。在这篇文章中,我们将介绍 30 个有趣的工具和服务,帮助您更好地监控和管理您的 Linux 服务器。这些工具和服务涵盖了各种不同的方面,包括系统性能监控、日志分析、网络流量分析和安全性等。下面就让我们来一一了解它们吧!
网络技术联盟站
2023/05/03
8.8K0
这 30 个工具和服务可以更好地监控和管理 Linux 服务器,很全面!
Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu
Prometheus是针对容器和微服务的开源监控预警工具,功能稳健,适用于开发流程中的云端管理员和开发人员等各个相关方。Prometheus定时聚合配置对象中的指标数据,评估规则表达式,展示结果,发送预警。
宜信技术学院
2019/09/29
1K0
Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu
这 30 多种免费和开源的 Kubernetes 监控工具,性能和可靠性尽在掌控之中!
Kubernetes 是当今最受欢迎和广泛使用的容器编排和管理平台之一。它提供了高度可扩展的架构,使得在分布式环境中部署、管理和扩展应用程序变得更加容易。然而,随着应用程序数量和规模的增长,对于有效监控和管理 Kubernetes 环境变得至关重要。在本文中,我们将详细介绍 30 多种免费和开源的 Kubernetes 监控工具,以帮助您监视和优化 Kubernetes 集群的性能和可靠性。
网络技术联盟站
2023/05/26
3.9K0
这 30 多种免费和开源的 Kubernetes 监控工具,性能和可靠性尽在掌控之中!
Kubernetes监控内容、工具和最佳实践
Kubernetes 凭借其强大的功能,已成为部署和管理容器化工作负载的“容器编排平台”。然而,其架构的复杂性和动态特性给监控已部署工作负载和平台本身带来了重大挑战。
云云众生s
2024/05/15
2760
为什么说Prometheus是开源网络监控工具的后起之秀?优势有哪些?
网络监控是网络管理的重要组成部分,定期网络监控可以预防故障、优化性能、规划容量,确保网络的可用性、安全性等。相比较普通的监控工具,开源网络监控工具拥有可定制性、灵活性、可扩展性等优势,受到国内外众多企业的追捧,有哪些好用的开源网络监控工具,该如何选择呢?
星融元Asterfusion
2024/04/09
5100
为什么说Prometheus是开源网络监控工具的后起之秀?优势有哪些?
适用于 DevOps 和 SRE 的顶级监控工具
监控已经从简单的最佳实践转变为任何产品发布清单上的必需品。选择满足可观察性需求并确保您为客户提供服务的可靠性的工具至关重要。
用户5166556
2023/03/18
9620
适用于 DevOps 和 SRE 的顶级监控工具
【推荐】50+有用的Docker工具
容器生态系统比以往任何时候都增长和扩展得更快,而且有了这么多的Docker工具和服务,只要了解可用的选项,就会觉得这是一项艰巨的任务。无论你是初学者还是专家、开发人员或DevOps工程师、SRE或平台架构师,此列表都将是你理解最流行的产品以增强你与Docker开发每个阶段的指南。
liuxuewen
2018/09/20
6K0
【推荐】50+有用的Docker工具
Grafana收购Asserts.ai给用户带来的影响
Grafana Labs收购Asserts.ai,以便通过更简单、更自动化的方式帮助用户分析指标数据。
云云众生s
2024/03/27
1010
50多个有用的Docker工具集
Kubernetes是市场上最实用的最受欢迎的容器编排引擎。最初作为一个Google项目开始,成千上万的团队使用它来部署生产中的容器。谷歌声称它每周使用Kubernetes运行数十亿个容器。
shaonbean
2019/05/26
2.6K0
Kubernetes可观测性提升生产力降低成本的10种方法
工程团队使用集成了Kubernetes管理与编排层的云原生可观测性平台,有助于更快达成业务目标。
云云众生s
2024/04/02
1590
2022 年最佳 15 款网络监控工具
随着过去几十年企业网络的兴起,以及近年来随着虚拟、云和边缘网络的增加,监控工具已经显得越来越重要。在当今大多数企业中,监控混合 IT 环境中的网络流量对于主动网络管理至关重要。无论是检测行为异常、占用带宽、应对新威胁,还是使用历史数据绘制趋势图,监控工具在未来仍将是必不可少的。
网络技术联盟站
2022/04/20
2.5K0
2022 年最佳 15 款网络监控工具
Jtti:实用的新加坡服务器监控工具
选择合适的监控工具取决于您的需求和技术栈。许多工具提供免费或试用版,可以在实际使用前进行测试和评估。根据您的服务器架构、应用程序和监控目标,选择一个或多个适合的监控工具来确保服务器的稳定性和性能。
jtti
2023/10/09
2290
回答关于Kubernetes 监控的 9 个问题
在 Kubernetes 中,你可以监控很多方面,但关键是要明确哪些监控点是至关重要的。在最近的一次网络研讨会上,我们讨论了在 Kubernetes 平台上应该监控哪些内容、应遵循哪些最佳实践,以及为什么 Kubernetes 监控对于云原生应用开发如此重要。最后,我们收到了一些很好的问题,希望将这些问题的答案分享给大家。
灵雀云
2024/07/18
1490
回答关于Kubernetes 监控的 9 个问题
解码PostgreSQL监控
对 PostgreSQL 的性能问题进行监控至关重要。PostgreSQL 是一个强大的开源关系数据库系统,以其健壮性、可扩展性和对可扩展性和标准符合性的强调而脱颖而出。在本 PostgreSQL 监控指南中,我们将介绍应监控的关键 PostgreSQL 指标、PostgreSQL 监控的最佳实践以及一些可以设置 PostgreSQL 监控的工具。
云云众生s
2024/03/28
4330
解码PostgreSQL监控
推荐阅读
相关推荐
可观测性就是对“监控”的包装?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验