Подтвердить что ты не робот

Как создать условие EXISTS в sequelize

У меня есть модель, где есть 3 объекта:

User
Project
Contributor

У проекта есть Владелец (который является Пользователем) и имеет несколько Участников (которые являются Пользователями). В моей панели инструментов я хочу перечислить пользовательские проекты, то есть все проекты, в которых Пользователь является владельцем или вкладчиком.

Поиск принадлежащих проектов с использованием Project.findAll({where: [owner: user]}) тривиален. Как мне изменить это, чтобы узнать о проектах, в которых пользователь также является вкладчиком? Это (в запросе базы данных) переводится в подзапрос с использованием предложения EXISTS.

4b9b3361

Ответ 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 ...)']
    }
})