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

Sequelize:multiple where-sætning

Jeg går ud fra, at du spørger om Sequelize måde at udføre forespørgslen på. Jeg er ikke sikker på, om jeg forstår dit spørgsmål korrekt. Du leder efter to forespørgsler:

  • Forespørg alle artikler fra fulgte brugere,
  • Forespørgsel på land/tag/artikel for en bestemt bruger,

Lad mig starte med associationerne mellem modellerne.

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

Med brug af ovenstående tilknytning er vi nu i stand til at forespørge på alle artikler fra fulgte brugere

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

Ovenstående forespørgsel ville generere resultat svarende til

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

Hvis du vil forespørge på land/tag/artikel, der er abonneret af en bestemt bruger, skal du oprette en anden tilknytning i Subscribe model

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

Nu har vi alle de tilknytninger, der kræves for at udføre den anden forespørgsel, du bad om

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

I dette eksempel får du bruger med alle hans abonnementer tilgået via user.Subscribes , som vil have indlejrede attributter Tag , Country og Article . Hvis brugeren abonnerer på Tag , begge Country og Article ville være NULL i dette tilfælde.



  1. Hvordan ATAN2() virker i MariaDB

  2. Ingen resultater efter fjernelse af mysql ft_stopword_file

  3. MySQL-indekset bremser forespørgslen

  4. Er timestampdiff() i MySQL ækvivalent med datediff() i SQL Server?