Sequelize где область с объединенной таблицей - PullRequest
0 голосов
/ 27 января 2020

У меня есть отношение ко многим связям за объединенным столом

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

В настоящее время, когда я запускаю находку, мне возвращаются все мои курсы, даже детские, это ожидаемое поведение, но я хочу чтобы иметь другую область, где я могу запросить только курсы с детьми.

В моей области у меня есть следующее где:

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

Но остальные API дает мне следующий вывод

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

В документации я не могу найти способ сделать это, я пробовал sequelize.literal и оператор in, но безуспешно. Кто-нибудь знает, как это сделать, я уверен, что что-то упустил.

1 Ответ

0 голосов
/ 28 января 2020

Решил это, используя 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 в include.

...