orm - 使用 Sequelize 连接 3 个表

标签 orm sequelize.js

我正在尝试将以下原始查询转换为 ORM,但无法实现任何目标。

原始查询

select * from "Invoices" I 
LEFT JOIN "Requests" R ON R."id" = I."requestId" 
LEFT JOIN "Supps" S ON S."requestId" = R."id" 
where S."confirm" = 'OK'

我试过的:
  Requests.belongsTo(Invoices, { foreignKey: "id" });
  Supps.belongsTo(Requests, { foreignKey: "requestId" });
  Supps.hasMany(Requests, { foreignKey: "requestId" });
  Invoices.hasMany(Requests, { foreignKey: "requestId" });

  Invoices.findOne({
    include: [{ model: Requests, required: false }, { model: Supps, required: false }],
    where: { Sequelize.col("Supps.confirm"): { "OK" } }
  }).then(data => {
    console.log(data);
  })

但这会生成一个非常长的查询,其中包含多个子查询和错误数据

最佳答案

当然,您还需要在 th 关联中添加 sourceKey。 ( doc )

Supps.hasMany(Requests, { foreignKey: "requestId" ,sourceKey: '{ID}' });
Invoices.hasMany(Requests, { foreignKey: "requestId",sourceKey: '{ID}'  });

您也可以添加 {raw:true} 以获得一级 json 响应。
 Invoices.findOne({
    include: [{ model: Requests, required: false }, { model: Supps, required: false }],
    where: { Sequelize.col("Supps.confirm"): { "OK" } },
    raw:true
  }).then(data => {
    console.log(data);
  });

关于orm - 使用 Sequelize 连接 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60073614/

相关文章:

PHP:我可以与我的数据库表结构一起使用的 ORM 框架或库

node.js - SequelizeConnectionError : FATAL: remaining connection slots are reserved for non-replication superuser connections

sql - 如果连接表有 where 子句,则限制在主表上

c# - Fluent NHibernate AutoMapping,应该可以节省时间,但这让我很抓狂

database - ORM 和数据库约束

java - 在 JPA 中传递以持久保存的分离实体以进行批量插入

php - 使用 php 变量作为 sql 字段 laravel Eloquent ORM

javascript - Sequelize::findAll 不是函数

MySQL LOAD DATA INFILE 不加载完整数据

mysql - Sequelize - 如何使用 sequelize 将 csv 数据插入 mysql 中的多个表中