【发布时间】:2020-06-17 05:06:54
【问题描述】:
我是 Sequelize 的新手,我很难理解这一点。这是我的原始查询:
select * from routes r join transports t where origin like :origin and destination like :destination and convert(departure, date) like convert(:date, date) and r.transportId = t.id
我想在 Sequelize 中执行此操作,并查看我尝试过的文档:
const { Sequelize, Op } = require("sequelize");
Route.findAll({
where: {
destination,
origin,
Sequelize.where(Sequelize.fn('CONVERT', Sequelize.col('departure'), 'date'): {
[Op.like]: Sequelize.fn('CONVERT', date, 'date'))
}
},
include: [{
model: db.transport,
as: 'transport'
}]);
但我遇到语法错误。
编辑:
Route.findAll({
where: {
destination,
origin,
Sequelize.where(Sequelize.fn('CONVERT', Sequelize.col('departure'), 'date'), {
[Op.like]: Sequelize.fn('CONVERT', date, 'date')
})
},
include: [{
model: db.transport,
as: 'transport'
}]
});
我仍然遇到同样的语法错误:
Sequelize.where(Sequelize.fn('CONVERT', Sequelize.col('departure'), 'date'), {
^
SyntaxError: Unexpected token '.'
编辑:
Route.findAll({
where: {
[Op.and]: [
{ destination, origin },
Sequelize.where(Sequelize.fn('CONVERT', Sequelize.col('departure'), 'date'), {
[Op.like]: Sequelize.fn('CONVERT', date, 'date')
})
]
},
include: [{
model: db.transport,
as: 'transport'
}]
});
它消除了之前的语法错误。现在我得到了这个:
SequelizeDatabaseError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''date') LIKE CONVERT('2020-05-28 00:00:00', 'date'))' at line 1
【问题讨论】:
-
你能粘贴出现语法错误的错误日志吗?我还建议您不惜一切代价避免基于字符串比较执行 JOIN,并开始基于给定寄存器的 ID 执行它们。
-
@RamiroOlivencia,我想没必要 - 括号中的闭包是明显的问题
标签: javascript sql node.js sequelize.js