Как создать условие EXISTS в sequelize
У меня есть модель, где есть 3 объекта:
User
Project
Contributor
У проекта есть Владелец (который является Пользователем) и имеет несколько Участников (которые являются Пользователями). В моей панели инструментов я хочу перечислить пользовательские проекты, то есть все проекты, в которых Пользователь является владельцем или вкладчиком.
Поиск принадлежащих проектов с использованием Project.findAll({where: [owner: user]})
тривиален. Как мне изменить это, чтобы узнать о проектах, в которых пользователь также является вкладчиком? Это (в запросе базы данных) переводится в подзапрос с использованием предложения EXISTS.
Ответы
Ответ 1
Например, мы определяем следующие ассоциации:
Project.belongsToMany( User, {through: 'Contributor'} );
User.belongsToMany( Project, {through: 'Contributor'} );
Project.belongsTo( User, { as: 'Owner', foreignKey: 'owner'} );
Если вы хотите найти проекты, в которых пользователь является вкладчиком и владельцем, вы можете сделать это следующим образом:
user.getProjects({ where: {owner: user.id} });
Ответ 2
не пользователь Sequelize здесь, но, читая документы, похоже, вы можете просто использовать оператор $содержит в своем предложении where. Что-то вроде:
Project.findAll({
where: {
owner: user,
contributors: {
$contains: [user.id]
}
}
});
Ответ 3
В общем, вы можете использовать exists
положение в where
, как это:
Project.findAll({
where: {
$and:[sequelize.literal('exists (select 1 from "someTable" where ...)']
}
})