如何在Sequelize中为嵌套列过滤创建数组形式字符串键?
解决Sequelize嵌套列过滤的键定义问题
首先明确:在JavaScript中,{ '$article.id$': 9 } 和代码里的{ [$article.id$]: 9 }是功能完全等价的对象。后者是ES6的计算属性语法,只是定义对象键的方式不同,最终生成的对象结构和前者没有区别——你看到的{ '$article.id$': 9 }是对象的常规输出形式,而非代码写法的问题。
如果你是需要在代码中用动态方式生成这个键(比如key是变量),可以直接用计算属性语法构建where对象:
const key = 'article.id'; const queryObj = { 'article.id': '9' }; // 直接构建where条件 const where = { [`$${key}$`]: +queryObj[key] };
如果是给已有的filter对象动态添加属性,你当前的代码:
filter[`$${key}$`] = +queryObj[key];
本身就是正确的写法,它和计算属性定义的效果完全一致。Sequelize在解析where条件时,只要键是$article.id$这种格式,不管是静态字符串还是动态生成的,都能正确识别嵌套关联的列。
如果你的嵌套过滤没有生效,建议检查:
- 关联模型是否已经正确定义(比如
Article和关联模型之间的belongsTo/hasMany配置) - 查询时是否使用了
include选项加载关联模型 key变量的取值是否正确,确保生成的键是$关联名.列名$的格式
内容的提问来源于stack exchange,提问作者Amenangelo
相关产品推荐
相关产品推荐

