Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sequelize :plusieurs clauses WHERE

Je suppose que vous posez des questions sur la façon dont Sequelize effectue la requête. Je ne suis pas sûr de bien comprendre votre question. Vous recherchez deux requêtes :

  • Interroger tous les articles des utilisateurs suivis,
  • Interroger le pays/tag/article abonné d'un utilisateur spécifique,

Permettez-moi de commencer par les associations faites entre les modèles.

// 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' });

Avec l'utilisation de l'association ci-dessus, nous sommes maintenant en mesure d'interroger tous les articles des utilisateurs suivis

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
});

La requête ci-dessus générerait un résultat similaire à

{
    id: 1,
    Followers: [
        {
            id: 4,
            Articles: [
                {
                    id: 1,
                    title: 'article title' // some example field of Article model
                }
            ]
        }
    ]
}

Si vous voulez interroger le pays/tag/article souscrit par un utilisateur spécifique, vous devrez faire une autre association dans Subscribe modèle

// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });

Nous avons maintenant toutes les associations nécessaires pour effectuer la deuxième requête que vous avez demandée

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
});

Dans cet exemple, vous obtenez un utilisateur avec tous ses abonnements accessibles via user.Subscribes , qui aura des attributs imbriqués Tag , Country et Article . Si l'utilisateur s'est abonné à Tag , les deux Country et Article serait NULL dans ce cas.