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。
不知道未来的版本是否会支持,或者是不是已经存在好的办法,我没搜到,如果有大佬知道,还望不吝赐教!

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 中兴通讯积极面向下一代推广OPNFV项目

    中兴通讯积极面向下一代推广OPNFV项目

    2022年3月4日
    39
  • vdbench和fio测试磁盘性能的对比总结

    vdbench和fio测试磁盘性能的对比总结vdbench和fio测试磁盘性能的对比总结一、安装1、安装vdbench,首先安装java:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html               其次下载vdbench安装包并进行安装:http://pan.bai…

    2022年5月19日
    180
  • lrzsz linux安装包,linux 离线安装lrzsz「建议收藏」

    lrzsz linux安装包,linux 离线安装lrzsz「建议收藏」安装gcc环境yuminstall–downloadonly–downloaddir=/usr/local/gccgccyuminstall–downloadonly–downloaddir=/usr/local/gcc++gcc-c++cd/usr/local/gcccd/usr/local/gcc++1.下载lrzsz-0.12.20.tar.gz2.上传压缩包到服…

    2022年6月23日
    88
  • 高通平台dtb文件的加载过程「建议收藏」

    高通平台dtb文件的加载过程「建议收藏」高通平台dtb文件的加载过程高通平台对dts的两种打包方式zImage-dtbdt.imgzImage-dtb方式zImage-dtb的编译二进制文件查看lk的加载过程代码分析dt.img方式dt.img的编译lk的加载过程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyP…

    2025年7月5日
    6
  • md5 java 实现_MD5加密的Java实现

    md5 java 实现_MD5加密的Java实现在各种应用系统中,如果需要设置账户,那么就会涉及到储存用户账户信息的问题,为了保证所储存账户信息的安全,通常会采用MD5加密的方式来,进行储存。首先,简单得介绍一下,什么是MD5加密。MD5的全称是Message-DigestAlgorithm5(信息-摘要算法),在90年代初由MITLaboratoryforComputerScience和RSADataSecurityInc的…

    2022年7月9日
    18
  • Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值

    Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值Vue2.0传值方式:在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来。这时必然会产生一些疑问和需求?比如一个组件调用另一个组件作为自己的子组件,那么我们如何进行给子组件进行传值呢?如果是电商网站系统的开发,还会涉及到购物车的选项,这时候就会涉及到非父子组件传值的情况。当然你也可以用Vuex状态管理工具来实现,这部分我们后续会单独介绍。先给大家介绍Vue常见的三种传值方式

    2022年5月13日
    37

发表回复

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

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