我遇到了异常,无法在任何地方找到解决方案。它看起来像是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 user
。id
,user
。created_at
AS createdAt
FROM user
AS {{ 1}} ORDER BY user
。user
DESC LIMIT 10)AS created_at
LEFT OUTER JOIN user
AS question
ON {{ 1}}。questions
= user
。id
ORDER BY questions
。user_id
DESC
似乎order by被应用了两次。第二次,'created_at'已被重命名为' createdAt'。这就是为什么db抱怨'无法找到user.created_at'。
我的问题是如何解决这个问题,以便我可以运行我的查询。我找不到任何可用的解决方案。为什么Sequelize应用'命令'两次?看起来没必要。
答案 0 :(得分:0)
答案 1 :(得分:0)
sequelize没有问题,
以下代码中的问题:在include块中有一个额外的{
,删除第一个
models.User.findAll({
limit:limit,
order:[['createdAt','DESC']],
include : [{
{
model:models.Question,
as:"questions"
},]
})
查询是100%正确,我已经执行了相同的方式,并且它的工作正常(sequelize和sql)。
您可能遇到的问题是:
createdAt
created_at
字段
models.User.findAll()
内你可能使用了attributes
和
忘了添加created_at
尝试在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
你会弄清楚查询的错误