排序查询,其中相关表中不存在记录或相关表中存在条件

时间:2019-10-04 19:51:35

标签: postgresql sequelize.js

我正在尝试编写一个序列化查询,其中包括来自具有hasMany关系的不同表的关系。我希望查询返回,如果相关表中的某些列符合我的条件,或者相关表中没有与主表中的外键相关的行。

请考虑两种不同的模型,主要的一种是文件夹,具有ID,名称等列,而相关的表是folderOwners,其ID,folderId和groupId列显示哪些文件夹归哪个组拥有。因此,文件夹可以具有多个所有者组。

include: [{
          association: "owners",
          required: true,
          where: {
            groupId: {[Op.in]: userGroups.map(group => group.id)}
          }
        }]

我可以获取用户所属组之一拥有的文件夹,但是如果相关表中没有行,我想获取所有文件夹,这意味着该文件夹不归任何人所有。 我尝试将必填项更改为false,并在以下类似位置使用Op.or

         required: true,
          where: {
          [Op.or]: [
            {groupId: {[Op.in]: userGroups.map(group => group.id)}},
            {groupId: {[Op.eq]: null}}
              ],
          }

那么,有什么方法可以实现我想要的?

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,请尝试以下代码:

    Folder.findAll({include: [{model: Group, required: false}])

它将获取所有带有和不带有组的文件夹

答案 1 :(得分:1)

您可以使用如下语法从父模型的“where”对象引用嵌套模型的列:“$AssociatedTableName.columnName$”

Folder.findAll({
  where: {
    [Op.or]: [
      { '$Group.id$': null },
      {
        '$Group.id$': {
          [Op.in]: [ids],
        },
      },
    ],
  },
  include: [
    {
      model: Group,
      as: 'Group',
      required: false,
    },
  ],
});