Sequelize中hasMany关联的反向查询实现方法
实现Sequelize反向关联查询的方案
首先,你需要先给Articles模型补充反向关联关系,因为目前只设置了Users.hasMany(Articles)的单向关联,双向关联才能让你从Articles端顺利查询关联的User。
步骤1:添加反向关联
在定义完两个模型后,添加以下代码:
// 补充反向关联,指定外键和关联别名(别名可自定义,比如这里叫'Author') Articles.belongsTo(Users, { foreignKey: 'userId', // 和Users.hasMany自动生成的外键保持一致 as: 'Author' // 自定义关联名称,后续查询时要用到 });
如果不需要自定义别名,也可以简化成:
Articles.belongsTo(Users);
此时默认的关联名称是模型名的单数形式user(对应Users模型)。
步骤2:根据需求执行反向查询
下面分两种常见场景给出示例:
场景1:查询单篇/多篇文章时,同时加载所属的用户
比如查询ID为article_1的文章,并关联查询它的作者:
Articles.findOne({ where: { id: 'article_1' }, include: [{ model: Users, as: 'Author' // 必须和belongsTo里设置的别名一致,如果没设别名就去掉as }] });
如果是查询所有文章并关联用户:
Articles.findAll({ include: [{ model: Users, as: 'Author' }] });
场景2:查询属于某个特定用户的所有文章
因为Articles表已经有userId外键,直接通过where条件过滤即可:
// 查询ID为'user_one'的用户发布的所有文章 Articles.findAll({ where: { userId: 'user_one' } });
如果需要同时加载该用户的信息,就加上include:
Articles.findAll({ where: { userId: 'user_one' }, include: [{ model: Users, as: 'Author' }] });
小提示
你之前的查询代码里写了includes,这是拼写错误,Sequelize的正确选项名是**include**(单数形式),记得修正哦~
内容的提问来源于stack exchange,提问作者sam23
相关产品推荐
相关产品推荐

