SequelizeJS按重命名属性排序

时间:2018-01-14 18:17:35

标签: orm sequelize.js

我遇到了异常,无法在任何地方找到解决方案。它看起来像是sequelizeJs的错误。

以下是问题:

我有两个型号

module.exports = db.sequelize.define('user', {
  // id is added automatically
  createdAt: {
    type: Sequelize.DATE,
    field: 'created_at'
  }
})

module.exports = db.sequelize.define('question', {
  // id is added automatically
  userId: {
    type: Sequelize.BIGINT,
    field: 'user_id'
  }
})

User.hasMany(Question,{foreignKey:'userId',as:'questions'})

然后我有一个问题:

  models.User.findAll({
      limit:limit,
      order:[['createdAt','DESC']],
      include : [{
      {
        model:models.Question,
        as:"questions"
      },]
    })

我有一个例外说:" SequelizeDatabaseError:未知栏' user.created_at'在'订单条款'"

这是生成的sql代码:

SELECT ***** FROM(SELECT useridusercreated_at AS createdAt FROM user AS {{ 1}} ORDER BY useruser DESC LIMIT 10)AS created_at LEFT OUTER JOIN user AS question ON {{ 1}}。questions = userid ORDER BY questionsuser_id DESC

似乎order by被应用了两次。第二次,'created_at'已被重命名为' createdAt'。这就是为什么db抱怨'无法找到user.created_at'。

我的问题是如何解决这个问题,以便我可以运行我的查询。我找不到任何可用的解决方案。为什么Sequelize应用'命令'两次?看起来没必要。

2 个答案:

答案 0 :(得分:0)

这似乎是一个未解决的问题

See GitHub

但是,您可以尝试在两个模型上明确说明要查询的属性。

答案 1 :(得分:0)

sequelize没有问题,

以下代码中的问题:在include块中有一个额外的{,删除第一个

models.User.findAll({
    limit:limit,
    order:[['createdAt','DESC']],
    include : [{
    {
        model:models.Question,
        as:"questions"
    },]
})

查询是100%正确,我已经执行了相同的方式,并且它的工作正常(sequelize和sql)。

您可能遇到的问题是:

  1. 您的用户表必须包含名为createdAt
  2. created_at字段
  3. models.User.findAll()内你可能使用了attributes和 忘了添加created_at
  4.   

    尝试在sql中运行查询,并检查错误

    SELECT ***** FROM (SELECT user.id, user.created_at AS createdAt FROM user AS user ORDER BY user.created_at DESC LIMIT 10) AS user LEFT OUTER JOIN question AS questions ON user.id = questions.user_id ORDER BY user.created_at DESC

    你会弄清楚查询的错误