sql >> Database >  >> RDS >> Mysql

Sequelize:meerdere waar clausule

Ik neem aan dat je vraagt ​​naar de manier waarop Sequelize de query uitvoert. Ik weet niet zeker of ik je vraag goed begrijp. U zoekt twee vragen:

  • Alle artikelen van gevolgde gebruikers opvragen,
  • Bevragen op land/tag/artikel van specifieke gebruiker,

Laat ik beginnen met de associaties tussen de modellen.

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

Met gebruik van bovenstaande koppeling kunnen we nu alle artikelen van gevolgde gebruikers opvragen

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

Bovenstaande zoekopdracht zou een resultaat opleveren dat vergelijkbaar is met

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

Als u land/tag/artikel wilt opvragen waarop een specifieke gebruiker is geabonneerd, moet u andere koppelingen maken in Subscribe model

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

Nu hebben we alle koppelingen die nodig zijn om de tweede zoekopdracht uit te voeren waar u om vroeg

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 dit voorbeeld krijg je gebruiker met al zijn abonnementen toegang via user.Subscribes , die geneste attributen zal hebben Tag , Country en Article . Als de gebruiker zich heeft geabonneerd op Tag , beide Country en Article zou zijn NULL in dit geval.



  1. Mysql-tekenreeks splitsen

  2. SQL WHERE-voorwaarde is niet gelijk aan?

  3. Postgresql geaggregeerde array

  4. Samengestelde primaire sleutel maken in SQL Server