我有一个模型,其中有三个实体:
User
Project
Contributor
一个项目有一个所有者(即用户),并且有多个贡献者(即用户)。在我的仪表板中,我想列出一个用户的项目,即该用户是所有者或贡献者的所有项目。
使用Project.findAll({where: [owner: user]})
查找所有者项目很简单。如何修改此代码以找到该用户还是贡献者的项目?这将(在数据库查询中)转换为使用EXISTS子句的子查询。
我有一个模型,其中有三个实体:
User
Project
Contributor
一个项目有一个所有者(即用户),并且有多个贡献者(即用户)。在我的仪表板中,我想列出一个用户的项目,即该用户是所有者或贡献者的所有项目。
使用Project.findAll({where: [owner: user]})
查找所有者项目很简单。如何修改此代码以找到该用户还是贡献者的项目?这将(在数据库查询中)转换为使用EXISTS子句的子查询。
通常您可以在where
子句中使用exists
,如下所示:
Project.findAll({
where: {
$and:[sequelize.literal('exists (select 1 from "someTable" where ...)']
}
})
Project.belongsToMany( User, {through: 'Contributor'} );
User.belongsToMany( Project, {through: 'Contributor'} );
Project.belongsTo( User, { as: 'Owner', foreignKey: 'owner'} );
user.getProjects({ where: {owner: user.id} });
我不是Sequelize的用户,但从文档中看来,似乎可以在where子句中简单地使用$contains运算符。例如:
Project.findAll({
where: {
owner: user,
contributors: {
$contains: [user.id]
}
}
});
[Op.and]
代替$and
,这个更改使它工作了。谢谢。 - Fábio BC Souza