Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Sequelize:cláusula where múltipla


Eu suponho que você perguntou sobre a maneira de fazer a consulta do Sequelize. Não tenho certeza se entendi sua pergunta corretamente. Você está procurando duas consultas:
  • Consulte todos os artigos de usuários seguidos,
  • Consulte o país/tag/artigo inscrito de um usuário específico,

Deixe-me começar com as associações feitas entre os modelos.
// in User model definition
User.belongsToMany(User, { as: 'Followers', through: 'Followers', foreignKey: 'userId', otherKey: 'followId' });
User.hasMany(Subscribe, { foreignKey: 'userId' });
User.hasMany(Article, { foreignKey: 'userId' });

Com o uso da associação acima, agora podemos consultar todos os artigos de usuários seguidos
models.User.findByPrimary(1, {
    include: [
        {
            model: models.User,
            as: 'Followers',
            include: [ models.Article ]
        }
    ]
}).then(function(user){
    // here you have user with his followers and their articles
});

A consulta acima geraria um resultado semelhante a
{
    id: 1,
    Followers: [
        {
            id: 4,
            Articles: [
                {
                    id: 1,
                    title: 'article title' // some example field of Article model
                }
            ]
        }
    ]
}

Se você quiser consultar o país/tag/artigo inscrito por um usuário específico, você teria que fazer outras associações em Subscribe modelo
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });

Agora temos todas as associações necessárias para realizar a segunda consulta que você pediu
models.User.findByPrimary(1, {
    include: [
        {
            model: models.Subscribe,
            include: [ models.Tag, models.Country, models.Article ]
        }
    ]
}).then(function(user){
    // here you get user with his subscriptions
});

Neste exemplo você obtém o usuário com todas as suas assinaturas acessadas via user.Subscribes , que terá atributos aninhados Tag , Country e Article . Se o usuário se inscreveu em Tag , ambos Country e Article seria NULL nesse caso.