簡體   English   中英

將原始查詢轉換為續集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM