Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sequelize:mehrfache where-Klausel

Ich nehme an, Sie fragen nach der Art und Weise, wie Sequelize die Abfrage durchführt. Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe. Sie suchen nach zwei Abfragen:

  • Alle Artikel von verfolgten Benutzern abfragen
  • Abonniertes Land/Tag/Artikel eines bestimmten Benutzers abfragen

Lassen Sie mich mit den Assoziationen zwischen den Modellen beginnen.

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

Mit obiger Assoziation können wir nun alle Artikel von verfolgten Usern abfragen

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

Die obige Abfrage würde ein ähnliches Ergebnis wie

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

Wenn Sie Länder/Tags/Artikel, die von bestimmten Benutzern abonniert wurden, abfragen möchten, müssen Sie andere Zuordnungen in Subscribe vornehmen Modell

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

Jetzt haben wir alle Zuordnungen, die erforderlich sind, um die zweite von Ihnen angeforderte Abfrage durchzuführen

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 diesem Beispiel erhalten Sie einen Benutzer mit all seinen Abonnements, auf die über user.Subscribes zugegriffen wird , die verschachtelte Attribute Tag haben , Country und Article . Wenn der Benutzer Tag abonniert hat , beide Country und Article wäre NULL in diesem Fall.