嗨我有很多关系看起来像这样:
var Genres = db.define('Movie', {
name: {
type: Sequelize.STRING(100),
allowNull: false
},
description: {
type:Sequelize.STRING(),
allowNull: true
},
thumbnail: {
type: Sequelize.BLOB(),
allowNull: true
},
urlposter: {
type: Sequelize.STRING(245),
allowNull: true
}
});
var Users = db.define('User', {
username: {
type: Sequelize.STRING(25),
allowNull: false
},
password: {
type: Sequelize.STRING(25),
allowNull: false
}
});
Movies.belongsToMany(Users, {through: UM, foreignKey: 'Id_Movies'});
Users.belongsToMany(Movies, {through: UM, foreignKey: 'Id_Users'});
我将做的是返回所有没有指向特定用户链接的电影
这是我希望获得的SQL查询:
SELECT m.*
FROM Movies m
WHERE NOT EXISTS(SELECT NULL
FROM Users_Movies sc
WHERE sc.Id_Movies = m.id AND sc.Id_Users = 1)
这是我最接近的,但这只是返回所有带有ID 1用户链接的电影
Movies.findAll({
include: [
// {
// model:Genres,
// through:{attributes:[]}
// },
{
model:Users,
through:{attributes:[]},
where: {id: 1},
required: true,
}],
})
.then(function(movies){
done(null, movies);
})
.catch(function(error){
done(error, null);
});
但我想反过来。 现在我唯一的选择是对所有电影进行2次查询,对所有电影进行一次查询,并在列表中循环并将其从第一个列表中删除..这不是漂亮的代码。
答案 0 :(得分:0)
我知道我对此事迟到了,但是我认为在查询的“ where”中使用文字“ users.id IS NULL ”将达到目的:
Movie.findAll({
where: sequelize.literal("users.id IS NULL"),
include: [
{
model: Users,
through: { attributes: [] }
}],
})
.then(function (movies) {
done(null, movies);
})
.catch(function (error) {
done(error, null);
});
此解决方案基于以下Github问题:https://github.com/sequelize/sequelize/issues/4099