sql >> Base de Datos >  >> RDS >> Mysql

Secuela:cláusula where múltiple

Supongo que pregunta sobre la forma Sequelize de hacer la consulta. No estoy seguro de haber entendido su pregunta correctamente. Está buscando dos consultas:

  • Consulta todos los artículos de los usuarios seguidos,
  • Consultar país/etiqueta/artículo suscrito de un usuario específico,

Permítanme comenzar con las asociaciones hechas entre los modelos.

// 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 el uso de la asociación anterior, ahora podemos consultar todos los artículos de los usuarios seguidos

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 consulta anterior generaría un resultado similar a

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

Si desea consultar el país/etiqueta/artículo suscrito por un usuario específico, deberá realizar otras asociaciones en Subscribe modelo

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

Ahora tenemos todas las asociaciones necesarias para realizar la segunda consulta que solicitaste

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

En este ejemplo, obtiene un usuario con acceso a todas sus suscripciones a través de user.Subscribes , que tendrá atributos anidados Tag , Country y Article . Si el usuario se suscribió a Tag , ambos Country y Article sería NULL en este caso.