Sequelize - Как получить записи из одной таблицы, которые не связаны другой таблицей - PullRequest
0 голосов
/ 11 февраля 2019

Я использовал Sequelize, чтобы определить три объекта для рейтинговых сообщений:

var User = sequelize.define('User', {
  email:  {
    type: Sequelize.STRING,
    primaryKey: true
  }
});

var Post = sequelize.define('Post', {
  link: {
    type: Sequelize.STRING,
    primaryKey: true
  }
});

var Rating = sequelize.define('Rating', {
  result: Sequelize.STRING
});

Rating.belongsTo(Post);
Post.hasMany(Rating);

Rating.belongsTo(User);
User.hasMany(Rating);

Пользователь может оценивать несколько сообщений.Каждый рейтинг принадлежит только одному пользователю и одному сообщению.

Теперь я хотел бы запросить для данного пользователя все сообщения, которые еще не были оценены этим пользователем.Я пробовал тысячу способов, но безуспешно.Есть идеи, как этого добиться в Sequelize?Большое спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

Существует два метода: использовать необработанный запрос в Sequelize или также через запрос Sequelize -

Raw -

return Db.sequelize.query("SELECT * FROM Post P WHERE (P.id NOT IN (SELECT postId FROM Ratings R WHERE R.userId="+userId+")) ",{ type: Sequelize.QueryTypes.SELECT });

Sequelize -

return Post.findAll({
where: {
Sequelize.literal("(posts.id NOT IN (SELECT R.postId FROM Rating R WHERE R.userId="+userId+"))")
}
});
...