0

我与联接表有属于多个关系

  courseTree.associate = function (models) {
    models.courses.belongsToMany(models.courses, {
      through: 'course_tree',
      as: 'children',
      foreignKey: 'parent_id',
      otherKey: 'child_id'
    });
  };

目前,当我运行 find 时,我会恢复所有课程,甚至是儿童课程,这是预期的行为,但我希望有另一个范围,我只能请求有孩子的课程。

在我的范围内,我有以下内容:

scopes: {
  parents: {
    where: {
      children: { [Op.not] : null }
    }
  }
}

但是 Rest Api 给了我以下输出

  "name": "GeneralError",
  "message": "column courses.children does not exist",
  "code": 500

在文档中我找不到任何方法来做到这一点,我尝试了 sequelize.literal 和 in 运算符但没有成功。有谁知道这是如何完成的,我确定我错过了一些东西。

4

1 回答 1

0

通过使用解决了这个问题Sequelize.literal

  courses.addScope('getParents', {
    where: {
      [Op.and]: Sequelize.literal('"courses"."id" NOT IN (SELECT "course_tree"."child_id" FROM "course_tree")')
    }
  })

我遇到的另一个问题是孩子与父母的模型相同,在这种情况下, where 也适用于孩子。我通过添加where: false包含解决了这个问题。

于 2020-01-28T15:20:26.103 回答