Sequelize多表联合查询案例

Sequelize多表联合查询案例一、Table:现在有两个表,A和B,关联关系:MATCH表中的job_history_id与JOB_HISTORY表中的id相关联。二、需求:查询Match表中的user_id,report_comment,以及job_history_id所关联的JOB表中的job_link,在前端显示。三、Code:1.后端首先要建立两个表的关联:MatchScoreReportModel.belongsTo(JobHistoryModel,{foreignKey:’job_history

大家好,又见面了,我是你们的朋友全栈君。

一、Table:

现在有两个表,A和B,关联关系:
MATCH表中的job_history_id与JOB_HISTORY表中的id相关联。
在这里插入图片描述

二、需求:

查询Match表中的user_id,report_comment,以及job_history_id所关联的JOB表中的job_link,在前端显示。

三、Code:

1. 后端

首先要建立两个表的关联:

MatchScoreReportModel.belongsTo(JobHistoryModel, { 
   
  foreignKey: 'job_history_id',
  targetKey: 'id',
});

在这里插入图片描述
然后开始查询,中间用include进行连接:

const { 
    rows, count } = await MatchScoreReport.findAndCountAll({ 
   
  attributes: ['user_id', 'report_comment'],
  ...
  include: [
    { 
   
      attributes: ['job_link'],
      model: JobHistoryModel,
    },
  ],
  ...
});
return { 
   
  rows,
  count,
};

中间的…,指的是你的一些其他的条件。核心就是其中的include: []
这样就能查询出来我们想要的三个字段:user_id,report_comment,job_link

但是我们看一下拼接出来的SQL,以及查询出来的结果:

SELECT `MATCH_SCORE_REPORT`.`user_id`,
       `MATCH_SCORE_REPORT`.`report_comment`,
       `JOB_HISTORY`.`job_link` AS `JOB_HISTORY.job_link`
FROM `MATCH_SCORE_REPORT` AS `MATCH_SCORE_REPORT`
         LEFT OUTER JOIN `JOB_HISTORY` AS `JOB_HISTORY` ON `MATCH_SCORE_REPORT`.`job_history_id` = `JOB_HISTORY`.`id`;

我们可以看到,它是给job_link起了一个别名,叫做JOB_HISTORY.job_link
返回的结果部分截图(数据脱敏处理):
在这里插入图片描述
这样的话,前端得到的也是一个带有JOB_HISTORY.前缀的结果,
所以前端进行结果的遍历和处理的时候,也需要额外多做一些处理:

2. 前端

首先是接口的定义,对应的属性使用''包裹起来。

interface ReportComments { 
   
  user_id: string;
  report_comment: string;
  'JOB_HISTORY.job_link': string;
}

其次是遍历的时候,根据不同的框架可能需要自己调整获取的方式,但是直接xxx.xxx.xxx是会报错的,不过大概就那么几种方式,试试就能试出来:

我的情况:
(注意其中的不同,original.report_commentoriginal['JOB_HISTORY.job_link']

{ 
   
  Header: 'Comment',
  Cell({ 
    original }: { 
    original: ReportComments }) { 
   
    return <div className="p-2">{ 
   original.report_comment}</div>;
  },
},
{ 
   
  Header: 'JobURL',
  Cell({ 
    original }: { 
    original: ReportComments }) { 
   
    return <div className="p-2">{ 
   original['JOB_HISTORY.job_link']}</div>;
  },
},

另一位大佬的情况, 我贴上地址和截图:
https://blog.csdn.net/lvyuan1234/article/details/86727703
在这里插入图片描述
大同小异,简单一弄就好了。

四、后记:

有人可能会有疑问,我其实也有这个疑问,那个多余的前缀我们能不能去掉,我找了半天没找到办法,看到有个帖子说,目前还不支持,所以我就放弃了。如果实在需要,就可以自己写SQL。
不知道未来的版本是否会支持,或者是不是已经存在好的办法,我没搜到,如果有大佬知道,还望不吝赐教!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144746.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(3)
blank

相关推荐

  • STM32的优先级NVIC_PriorityGroupConfig的理解及其使用[通俗易懂]

    STM32的优先级NVIC_PriorityGroupConfig的理解及其使用[通俗易懂]写作原由:因为之前有对stm32优先级做过研究,但是没时间把整理的东西发表,最近项目需要2个串口,但是不是两个串口同时使用,只是随机使用其中一个,程序对2个串口的优先级需要配置;此文思路:“中断优先级”思维导图–&gt;关键要点—&gt;结合图和要点相关程序应用例程讲解;我们先来看ST公司的一张图:我自己依据此图理解,应用思维导图画了一张方便理解:(如果看不清可通过ctrl+鼠标滑轮   …

  • 主数据治理平台培训规程[通俗易懂]

    主数据治理平台培训规程[通俗易懂]主数据管理平台打通各业务链条,消除数据冗余,有助于打通部门、系统间壁垒,实现信息集成与共享。本文主要针对MDM主数据管理平台进行产品培训说明。

  • SpringBoot面试题及答案 110道(持续更新)

    SpringBoot面试题及答案 110道(持续更新)最新SpringBoot面试题【附答案解析】SpringBoot面试题及答案,SpringBoot最新面试题及答案,SpringBoot面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~如果不背SpringBoot面试题的答案,肯定面试会挂!这套SpringBoot面试题大全,希望对大家有帮助哈~博主已将以下这些面试题整理成了一个面试手册,是PDF版的1、SpringBo

  • Excel中的sumifs_理解和懂得的区别

    Excel中的sumifs_理解和懂得的区别SUMIF函数和SUMIFS函数都是EXCEL常用函数之一,同时这二个函数都是条件求和,只不过SUMIF函数是单条件求和,SUMIFS函数是多条件求和,其语法结构也是不同的。希望通过本经验能够使大家对

  • android读取短信_android发短信代码

    android读取短信_android发短信代码在Tasker中利用短信的通知实现短信内容转发到微信之前的教程是利用Tasker自带的短信变量来实现的,这有一个无法解决问题:在360,魅族,坚果等品牌的手机中无法获取短信的消息内容。利用短信的通知则可以获取短信的内容,并且对于华为手机来说也可以不用关闭短信验证码保护功能,所以相较于原来的方法更简单,方便。应用通知的变量是一个本地数组变量%evtprm(),这个变量数组包含%evtprm…

    2022年10月13日
  • JQ-checkbox实现单选功能

    JQ-checkbox实现单选功能<divstyle=”line-height:1.5em;padding:5px0;font-size:14px;”><ulclass=”mui-table-view”><liclass=”mui-input-row”><inputtype=”checkbox”name=”quesA”id=”quesA”value=”…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号