首页 > 解决方案 > 是否可以使用 findAll() 创建查询并通过使用来自 pivot 的 ForeignKey(关系多对多)获得过滤结果?

问题描述

我有两个表UsersLists我创建了一个关联第三个表(多对多),外键 Pivot as Editors. 我想基于枢轴返回Lists,然后在一个查询中获取所有其他。当查询内部包含用户模型时,我可以使用 where 查询,但是当我尝试在 where 上执行时,我会收到错误。是否可以在某一时刻查询并获取过滤列表?req.user.idFK_Editors_User_IdeditorsFK_Editors_User_IdList.findAll()there is no column in List.FK_Editors_User_IdList.findAll()all editors

获取列表方法,该方法应返回编辑器可以编辑的所有过滤列表,每个列表返回所有当前其他编辑器。

List.findAll({
  where: {
    'FK_EditorsLists_Users_Id': 2
  },
  attributes: [
    'id',
    'title',
    'createdAt',
    'updatedAt'
  ],
  include: [{
    model: User,
    required: true,
    attributes: [
      'id',
      'lastName',
      'firstName',
      'userName',
      'email'
    ]
  }]
})

但我不能FK_EditorsLists_Users_Id在这种情况下使用,因为 sequalize 看不到模型Editors内部表中的外键List。如何将 FK 键添加到 List 模型,并且可以通过以下方式找到FK_EditorsLists_Users_Id

没有任何“where”过滤器的所有结果

场景 1:以 Ammie 身份登录应该只能看到 1 个列表,因为她只能编辑一个列表,她也可以看到谁也可以编辑列表

标签: javascriptmysqlnode.jsormsequelize.js

解决方案


一方面,我认为:您需要通知 sequelize 使用哪个关联。假设您的关联是这样的:

List.belongsToMany(User, {as: 'list2User', through: Editors, foreignKey: 'list_id', targetKey: 'id'} );

那么您的协会需要说:

List.findAll({
   // ... other stuff ...
    include: [{
    model: User,
    required: true,
    as: 'list2User'   // critical!!
   // ... other stuff ...
   where : {id : 2 }
  }]
})

我上面的示例将有助于用户 2 编辑的所有列表。但是,我认为,要让这些列表的所有编辑者都需要另一个关联。


推荐阅读