[英]Is there any way to convert the fields of raw Sequelize query into camelcase?
[英]Convert raw query to sequelize
我是 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
只需正確格式化
Sequelize.where(Sequelize.fn('CONVERT', Sequelize.col('departure'), 'date'),
{
[Op.like]: Sequelize.fn('CONVERT', 'date', date)
}
)
where: {
[Op.and]: [
{ destination: {[Op.like]: destination }},
{ origin: {[Op.like]: origin }},
Sequelize.where(Sequelize.fn('CONVERT', Sequelize.col('departure'), 'date'),
{
[Op.like]: Sequelize.fn('CONVERT', date, 'date')
})
]
}
我已經想通了。 我終於不得不使用Sequelize.literal使它工作:
Route.findAll({
where: {
[Op.and]: [
{ destination },
{ origin },
Sequelize.where(Sequelize.literal('CONVERT(departure, date)'), {
[Op.like]: Sequelize.literal('CONVERT("' + date + '", date)')
})
]
},
include: [{
model: db.transport,
as: 'transport'
}]
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.