Mysql
 sql >> Database >  >> RDS >> Mysql

Sequelizza:clausola multiple where

Presumo che tu chieda informazioni sul modo in cui Sequelize esegue la query. Non sono sicuro di aver capito correttamente la tua domanda. Stai cercando due domande:

  • Interroga tutti gli articoli degli utenti seguiti,
  • Ricerca paese/tag/articolo di iscrizione dell'utente specifico,

Vorrei iniziare con le associazioni fatte tra i modelli.

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

Con l'uso dell'associazione di cui sopra ora siamo in grado di interrogare tutti gli articoli degli utenti seguiti

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 query precedente genererebbe un risultato simile a

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

Se vuoi interrogare paese/tag/articolo sottoscritto da un utente specifico, dovresti creare un'altra associazione in Subscribe modello

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

Ora abbiamo tutte le associazioni necessarie per eseguire la seconda query richiesta

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

In questo esempio ottieni l'utente con tutte le sue iscrizioni a cui si accede tramite user.Subscribes , che avrà attributi nidificati Tag , Country e Article . Se l'utente si è iscritto a Tag , entrambi Country e Article sarebbe NULL in questo caso.