Estoy tratando de consultar mi tabla de publicaciones para recuperar las publicaciones que sigue el usuario. Este es un patrón popular, así que asumo que hay una manera de hacerlo con Sequelize.
Tengo un modelo de usuario que está asociado a un modelo de publicación.
models.User.hasMany(models.Post, {constraints: false, foreignKey: "UserId", onDelete: 'cascade'});
models.Post.belongsTo(models.User, {foreignKey: "UserId", onDelete: 'cascade'})
El modelo de Usuario está asociado a un modelo de Seguidores (que muestra que el Usuario A sigue al Usuario B)
models.User.hasMany(models.Follower, {foreignKey: "FollowerId", as: "IsFollower"});
models.Follower.belongsTo(models.User, {foreignKey: "FollowerId", as: "IsFollower"});
models.User.hasMany(models.Follower, {foreignKey: "FollowingId", as: "IsFollowing"});
models.Follower.belongsTo(models.User, {foreignKey: "FollowingId", as: "IsFollowing"});
Esencialmente, estoy tratando de buscar publicaciones donde el usuario que creó la publicación es seguido por el usuario que realiza la consulta... como Instagram, Twitter, etc., donde solo ves las publicaciones de las personas a las que sigues.
Gracias de antemano, Harry :)
Asumiendo que estos son sus modelos usando una relación de muchos a muchos.
Modelo de seguidor:
module.exports = (sequelize, DataTypes) => { class Follower extends Model { static associate(models) {} }; Follower.init({ userId: DataTypes.INTEGER, followerId: DataTypes.INTEGER }, { sequelize, modelName: 'Follower', updatedAt: false }); return Follower; };Modelo de usuario:
class User extends Model { static associate(models) { this.belongsToMany(models.User, { through: models.Follower, as: 'followers', foreignKey: 'userId', otherKey: 'followerId' }); } };Puede obtener todos los usuarios que un usuario específico sigue de la siguiente manera,
const userId = 1; // as an example const followedUsers = await models.Follower.findMany({ where: { followerId: userId } });Para obtener publicaciones cuyo propietario es seguido por el usuario:
const posts = await models.Posts.findMany({ where: { ["$author.followers.id$"]: userId } }); Suponiendo que el modelo de Post tiene una relación de uno a muchos con User llamado author .