我在我的nodejs项目中使用Sequelizer,我无法从官方文档中做出任何贡献。然而我设法创建表并添加行等。但问题是我需要查询具有一些特殊条件的对象的关联。
我有用户模型,投票模型和职位模型。用户可以为某个位置的其他用户投票。所以这是构成关系的代码:
Position.hasMany(User,{as: 'Candidate'});
Votes.belongsToMany(User,{through: 'UserVote'});
User.belongsToMany(Votes,{through: 'UserVote'});
问题是我没有找到一种方法来查询一个已知用户尚未投票的职位。我该怎么做?
答案 0 :(得分:1)
我不是100%如何通过关联来做到这一点,但我会试着告诉你如何使用常规查询来做到这一点。请原谅语法,如果它不是完美的,这只是来自内存。假设您提供了用户标识符(我将其称为userId)。
编辑:我也注意到你正在使用MySQL。这适用于Postgres,但您可能需要调整它的语法才能适合您。我不了解MySQL的细节,但这应该足够让你明白了!
Position.findAll({
where: [
`NOT EXISTS(
SELECT 1
FROM "votes"
WHERE "votes"."position_id" = "position"."id" AND
"votes"."user_id" = ${userId}
)`
]
}).then(...);
我还没有找到一种更好的查询存在的方法。这种模式通常是我对这些查询的首选。我对你的实际数据库模型做了一些假设。
另外值得注意的是,这适用于Sequelize 3.x.x,但我认为它应该或多或少地适用于4.x.x.
祝你好运! :)