如何将订单信息传递给sequelize.js原始查询?

时间:2018-01-24 15:18:40

标签: node.js sequelize.js

在续集中,我可以使用

my_table.findAll({ order: [['datetime', 'desc']] }) 

按列查询数据和排序。但是当我尝试使用参数化的原始查询时:

var input_parameters = {order_column: 'datetime', order: 'desc'};

sequelize.query('select * from my_table order by :order_column :order',     { replacements: input_parameters, type: models.sequelize.QueryTypes.SELECT });

它无法返回正确的顺序,因为  订单信息asc / desc在查询中进行转义,最终准备好的查询类似于从“my_table”订单中选择*日期时间' '降序'&#39 ;.

有没有办法将订单信息传递给原始参数化查询?

3 个答案:

答案 0 :(得分:0)

这可能不是续集的方式,但是......如果:

"/BridgeSP" + "/" + SPId

答案 1 :(得分:0)

我想知道同样的事情。但是我认为原始查询中没有选项。

因此,我通常在class methods中定义model,以使用类似后续的方法。

/**
 * usage :
 *
 * model.findSomething({
 *   where: whereCondition,
 *   limit: limit,
 *   offset: offset,
 *   order: [
 *     ['col1', 'asc'],
 *     ['col2', 'desc']
 *   ]})
 */
model.findSomething = function ({where, limit, offset, order}) {

  let sql = 'SELECT col1, col2 FROM some_table '

... (build where conditions)

  // build order conditions
  if (order && order.length > 0) {
    let orderBy = ' ORDER BY '
    for (let i = 0; i < order.length; i++) {
      if (order[i].length > 0) { // [column] or [column, asc/desc]
        orderBy += (i > 0 ? ', ' : ' ') + order[i].join(' ')
      }
    }
    sql += orderBy
  } else {
    sql += ` ORDER BY comment_group, comment_depth, comments.comment_id`
  }

... (build limit and offset)
}

在调用sequelize.query之前,只需先构建sql statement

答案太迟了,但是希望这对您有所帮助。

答案 2 :(得分:-1)

let order_column = 'something';
let order = 'DESC';

sequelize.query('select * from my_table order by " + order_column +' ' order,     { replacements: input_parameters, type: models.sequelize.QueryTypes.SELECT })