In Sequelize, How do you perform a where query on an association inside of an $or statement?

Viewed 3124

I have three models, User, Project and ProjectMember. Keeping things simple, the models have the following attributes:

User
    - id

Project
    - id
    - owner_id
    - is_published

ProjectMember
    - user_id
    - project_id

Using sequelize.js, I want to find all projects where the project owner is a specific user, or where there is a project member for that project whose user is that user, or where the project is published. I imagine the raw SQL would look something like this:

SELECT p.*
FROM Project p
LEFT OUTER JOIN ProjectMember m
    ON p.id = m.project_id
WHERE m.user_id = 2
    OR p.owner_id = 2
    OR p.is_published = true;

There are plenty of examples out there on how to perform a query on an association, but I can find none on how to do so conditionally. I have been able to query just the association using this code:

projModel.findAll({
    where: { },
    include: [{
        model: memberModel,
        as: 'projectMembers',
        where: { 'user_id': 2 }
    }]
})

How do I combine this where query in an $or to check the project's owner_id and is_published columns?

1 Answers
Related