mysql - Sequelize where 查询一对多关联属性?

标签 mysql database sequelize.js

我在数据库中有以下表:
Users: id|name|age Hobbies: id|user_id|hobby
在 Sequelize 中,我有以下关联:
Users.hasMany(Hobbies) Hobbies.belongTo(Users)
要检索用户及其爱好的列表,查询如下:
Users.findAll(include: [{model: Hobbies}])
我将查询结果映射到域对象。

查询结果如下所示:
[{id: 1, name: 'John', age: 20, hobbies: ['fishing', 'running']}]
我试图返回一个有钓鱼爱好的用户列表。

据我了解,我可以像这样对关联本身应用 where 查询:
Users.findAll(include: [{model: Hobbies, where: {hobby: 'fishing'}}])
但这仍然会返回所有用户,并且只会返回每个钓鱼用户的爱好。

有没有办法根据用户的爱好在用户级别应用 where 查询?

最佳答案

我认为您需要更改连接类型。 Sequelize 在连接两个模型时默认使用左外连接,但如果您通过将 required 设置为 true 将其更改为内连接,您将获得预期的结果 -

Users.findAll(include: [{model: Hobbies, where: {hobby: 'fishing'}, required : true}])

我希望它有帮助!

关于mysql - Sequelize where 查询一对多关联属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60609581/

相关文章:

node.js - 在 GraphQL Playground 中设置我想要使用的测试 header 会导致 "Server cannot be reached"

javascript - 如何使用带有 sequelize 和 mysql 的 Hook (beforeCreate) 保存密码

mysql - 如何将这 3 个 SQL 查询的输出(单个记录)合并到单个输出记录中?

php - MYSQL - 仅插入尚不存在的记录?

php - 根据容器宽度截断 PHP 字符串

sql - 为客户生成 SQL 升级脚本

database - sqlcipher命令行不工作

php - 根据屏幕大小从数据库中获取不同的图像

mysql - 如何将MySQL查询结果导出到多个 `txt`文件?

node.js - Sequelize 似乎在添加时更新每个关联的记录?