如何在sequelize中构建EXISTS子句

Ven*_*kat 21 node.js sequelize.js

我有一个模型,其中有3个实体:

User
Project
Contributor
Run Code Online (Sandbox Code Playgroud)

项目拥有所有者(他是用户)并且有多个贡献者(他们是用户).在我的仪表板中,我想列出用户的项目,即用户是所有者或贡献者的所有项目.

寻找拥有的项目Project.findAll({where: [owner: user]})是微不足道的.如何修改此项以查找用户也是贡献者的项目?这将(在数据库查询中)使用EXISTS子句转换为子查询.

Ali*_*fat 9

一般来说,您可以像这样使用exists子句where

Project.findAll({
    where: {
         $and:[sequelize.literal('exists (select 1 from "someTable" where ...)']
    }
})
Run Code Online (Sandbox Code Playgroud)


std*_*b-- 5

例如,我们定义下一个关联:

Project.belongsToMany( User, {through: 'Contributor'} );
User.belongsToMany( Project, {through: 'Contributor'} );

Project.belongsTo( User, { as: 'Owner', foreignKey: 'owner'} );
Run Code Online (Sandbox Code Playgroud)

如果您想要找到用户是贡献者和所有者的项目,您可以这样做:

user.getProjects({ where: {owner: user.id} });
Run Code Online (Sandbox Code Playgroud)