Sequelize 在查询中返回连接表

2024-02-12

我的 MSQL 表中这两个模型之间存在多对多关系:

  • 场所 - 代表可以有多个所有者(员工)的场所
  • 员工 - 代表员工,可以是首席执行官或销售员工或任何其他人员。

我在用续集 /questions/tagged/sequelize像这样建立关系:

关系员工 > 地点

 Employee.associate = function (models) { 
   models.Employee.belongsToMany(models.Venue, { through: 'EmployeeVenues' })
 }

联系地点 > 员工

 Venue.associate = function (models) {
    models.Venue.belongsToMany(models.Employee, { through: 'EmployeeVenues' })
 }

续集文档

根据续集文档 http://docs.sequelizejs.com/manual/tutorial/associations.html它将创建一个名为 EmployeeVenues 的新模型,其具有等效的外键employee_id 和venue_id。需要定义通过。 Sequelize 以前会尝试自动生成名称,但这并不总是会导致最合乎逻辑的设置。这将添加方法获取场地、setVenues、addVenue、addUsers 到 Employee。


这是正确工作的,当我启动 Sequelize 时,它​​会创建一个名为 EmpoyeeVenues 的新表,并使用正确的外键作为复合键。但是,当我查询 getVenues 时,它不会返回预期的输出。相反,它也返回关联的表值,这是我不想要的。


查询 id 为 1 的员工的所有场所


router.get('/api/v1/users/:employee_id/venues', (request, response) => {
  var employeeId = request.params.employee_id;

  models.Employee.findOne({
    where: {id: employeeId}
  }).then((employee) => {

    if(!employee) { return response.status(400).send("Employee doesnt have a venue registered yet.")}
    var venues = employee.getVenues().then((venues) => {
    response.status(200).send(venues);
  })
})
});

响应结果


[
    {
        "id": 1,
        "capacity": "11",
        "venue_name": "Club Fix",
        "venue_description": "Club in Tilburg",
        "EmployeeVenues": {
            "employee_id": 1,
            "venue_id": 1
        }
    },
    {
        "id": 2,
        "capacity": "400",
        "venue_name": "Club Vie",
        "venue_description": "Club in Rotterdam",
        "EmployeeVenues": {
            "employee_id": 1,
            "venue_id": 2
        }
    }
]

Question

为什么 EmployeeVenues 包含在 Sequelize 提供的此查询中?如何防止 EmployeeVenues 包含在响应中?

Update

根据 2014 年 Sequelize github 页面上的一个问题,有一个可行的解决方案

https://github.com/sequelize/sequelize/issues/2143 https://github.com/sequelize/sequelize/issues/2143

    User.find({
    where: {id: userId}, attributes: userFields,
    include: [
      {model: db.Role, attributes: roleFields, through: {attributes: []}}
    ]
});

但它与 Sequelize 文档中记录的版本不匹配,后者是最新的,至少应该是。


User.findAll({
  include: [{
    model: Project,
    through: {
      attributes: ['createdAt', 'startedAt', 'finishedAt'],
      where: {completed: true}
    }
  }]
});

或者甚至简单地说明参考文档: http://docs.sequelizejs.com/class/lib/associations/base.js~Association.html


user.getPictures() // gets you all pictures

Update

根据 2014 年 Sequelize github 页面上的一个问题,有一个可行的解决方案

https://github.com/sequelize/sequelize/issues/2143 https://github.com/sequelize/sequelize/issues/2143

    User.find({
    where: {id: userId}, attributes: userFields,
    include: [
      {model: db.Role, attributes: roleFields, through: {attributes: []}}
    ]
});

但它与 Sequelize 文档中记录的版本不匹配,后者是最新的,至少应该是。


User.findAll({
  include: [{
    model: Project,
    through: {
      attributes: ['createdAt', 'startedAt', 'finishedAt'],
      where: {completed: true}
    }
  }]
});

或者甚至简单地说明参考文档: http://docs.sequelizejs.com/class/lib/associations/base.js~Association.html


user.getPictures() // gets you all pictures
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sequelize 在查询中返回连接表 的相关文章

随机推荐

  • 是否可以通过用户操作或手动管理的触发器来解决 Promise?是的,所以我们能够形成可编辑的承诺

    我希望程序在完成某些用户操作后运行一系列操作 然而 链的一部分将需要等待先前 Promise 的解决或用户已执行某些操作的事实 Promise 可以这样工作吗 我想象理想的程序脚本是这样的 var coreTrigger Promise a
  • C# 中的日期和时间转换 - DateTime.ParseExact() 未按预期工作

    我有日期 时间格式 例如 2013 年 3 月 1 日 92230 根据这个文件 http msdn microsoft com en us library 8kb3ddd4 aspx and 这个链接 http www geekzilla
  • 在Web-Worker中同步等待消息

    是否有某种方法可以同步等待或检查网络工作人员中的新消息 我有一大堆复杂的代码 从 emscripten 编译的 LLVM 我无法围绕回调进行重构 我需要确保在收到并处理来自 UI 线程的消息之前 特定行之后的代码不会执行 如果我用 whil
  • 通过 TableExport.js 将表格上传到 Excel 时保持样式格式

    我在用着TableExport js导出我的html表到Excel文件 我可以导出表格 但在 Excel 工作表中css正在失败 帮助我解决这个问题 我在用着inline仅CSS 我在下面附上了我的代码
  • 通用枚举到可迭代转换器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 HttpServletRequest 使用了大量 java util Enumeration 我想在
  • com.eed3si9n#sbt- assembly 的库依赖项;0.13.0:未找到

    我正在构建一个 sbt 插件 并希望在 sbt assemble 插件中引用程序集任务 取决于我的任务 为此 我需要将其作为库引用 而不是插件 但不知何故 sbt 无法将其解析为库依赖关系 这就是我的 sbt 的样子 sbtPlugin t
  • 如何使用CMake检测目标架构?

    我已经做了很多研究 但无法找到答案 我如何使用 CMake 可靠地找到我正在编译的目标架构 基本上相当于qmake中的QMAKE TARGET arch 大多数来源似乎建议使用 CMAKE SYSTEM PROCESSOR 但这是一个糟糕的
  • 如何在 Android 中实现 Webhook?

    例如我想要一个网址www example com status在我的 Android 应用程序中 我将观察该应用程序并将从服务器接收多个 POST 请求 对于每个 POST 请求 我都会触发一个功能 我不明白如何在 URL 上实现 24x7
  • 使用照片框架删除相机胶卷资源

    我正在编写一个测试应用程序 看看是否可以使用照片框架删除 iOS 8 中的 照片库 资源 尽管我怀疑这是不可能的 但我发现文档不清楚 并且该网站上的帖子似乎表明这是可能的 看here https stackoverflow com ques
  • 如何解决ssh:/usr/lib64/libcrypto.so.10:没有可用的版本信息[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试执行 ssh 并收到以下消息 ssh ssh usr lib64 libcrypto so 10 no version info
  • 如何在具有源图像的 Flutter 中覆盖资源图像?

    我对 Dart 和 Flutter 相当陌生 并且在从源图像覆盖现有资产图像时遇到困难 我的尝试 try File localFile File assets images myImage png localFile writeAsByte
  • 如何通过 Composer 为 PHP CLI 提供脚本(作为独立的和作为依赖项)

    我正在尝试编写一个我想从命令行运行的 PHP 脚本 我想使用 Composer 来管理其依赖项 并使其可以作为其他项目的依赖项进行安装 我还想保持单独使用它 及其依赖项 的能力 现在 main php是我的 入口点 我将从命令行执行的内容
  • Flutter Widgets 排列和事件

    我正在尝试在 Flutter 中构建一个表单 请看一下我到目前为止制作的屏幕图像 我对这个页面有几个问题 我怎样才能对齐DropDown按钮 项目和任务 以便它们将以相同的宽度拉伸并且它们的图标将位于相同的位置 另外 我怎样才能用某种边框装
  • 将 Solr HDFS 数据复制到另一个集群

    我有一个 solr 云 v 4 10 安装 位于 Cloudera CDH 5 4 2 HDFS 之上 有 3 个 solr 实例 每个实例托管每个核心的一个分片 我正在寻找一种将 solr 数据从生产集群增量复制到开发集群的方法 有 3
  • php DOMDocument 添加带有 DOCTYPE 声明的 标头

    我通过 DOMDocument 类向每个链接添加 b 哈希 dom new DOMDocument dom gt loadHTML output a tags dom gt getElementsByTagName a foreach a
  • PDF 到 bmp 图像(12 页 = 12 张图像)

    我必须逐页解构 提取 pdf 为位图图像 这将通过我设置的网络服务在服务器上完成 我怎样才能做到这一点 它必须一页一页地显示 每张图像一页 我真的很困惑 我知道你们中的一位天才已经找到了我一直在寻找的答案 我努力了 http www pdf
  • IntelliJ IDEA:“无法解析 String、System 和其他 Java 类的符号”

    我最近将 IntelliJ IDEA 下载到另一台计算机上 在一台计算机上它工作正常 在另一台计算机上它给了我这个当前问题 当我使用模板打开一个新项目时 它会自动在各处显示错误 即使它允许代码运行并正确显示输出 标准 Java 库类 例如S
  • 机械化如何获取当前 url

    我有这个代码 require mechanize agent Mechanize new page agent get http something com page 1 next page page link with href gt p
  • Docker Tomcat容器无法访问Postgres容器

    我有一个带有 postgres 的 alpine docker 带有监听地址 并监听 5432 我正在使用它进行部署 docker run d name postgres me postgres v1 以及带有 oracle jre8 的
  • Sequelize 在查询中返回连接表

    我的 MSQL 表中这两个模型之间存在多对多关系 场所 代表可以有多个所有者 员工 的场所 员工 代表员工 可以是首席执行官或销售员工或任何其他人员 我在用续集 questions tagged sequelize像这样建立关系 关系员工