Sequelize v6如何在操作符参数中引用模型自身属性
Sequelize v6 where子句引用模型自身属性的正确写法
你当前写法的问题在于,传入的{field3}是JS对象字面量,Sequelize会将其识别为固定参数值,不会解析为表字段引用,因此无法实现两个字段值的对比判断。
实现同表字段值对比,需要使用Sequelize内置的列引用方法col(),该方法会显式告诉ORM传入的内容是表字段,而非需要转义的固定值。
正确实现步骤
- 从sequelize依赖中引入操作符
Op和列引用方法col - 在
[Op.ne]的参数位置传入col('要对比的字段名')
可直接运行的代码示例
// 引入需要的Sequelize内置方法 const { Op, col } = require('sequelize'); const resultArray = await myTable.findAll({ attributes: [ "field1", "field2", "field3" ], where: { field2: { [Op.ne]: col('field3') } } })
补充:如果需要写更复杂的字段对比逻辑(比如字段拼接、运算后对比),可以替换
col()为literal()方法直接传入原生SQL片段,写法为[Op.ne]: literal('field3'),常规字段对比场景优先使用col(),可自动适配字段名转义、表别名等场景,兼容性更好。
上述代码生成的SQL和预期逻辑完全一致:
SELECT field1, field2, field3 FROM myTable WHERE field2 != field3;
内容的提问来源于stack exchange,提问作者Kees123
相关产品推荐
相关产品推荐

