gpt4 book ai didi

orm - 使用多个表和别名构建 sequelize 查询

转载 作者:行者123 更新时间:2023-12-03 22:37:16 25 4
gpt4 key购买 nike

我有下一个查询:

SELECT ul.createdAt, ul.userId, l.url, l.caption FROM links AS l, userLinks AS ul WHERE ul.userId = 1 AND ul.linkId = l.id ORDER BY ul.createdAt DESC;

我尝试了多种方法将其转化为 Sequelize ,但没有一种方法是成功的。

现在我有一个名为 links 的模型和另一个名为 userLinks 的模型,我已经阅读了 sequelize 的文档和其他一些关于此的线程,但无法使其正常工作。

我如何构建我的查询
Link.findAll({
order: [[UserLink, 'createdAt', 'DESC']],
attributes: ['caption', 'id', 'url'],
limit: 15,
include: [
{
model: UserLink,
attributes: ['createdAt'],
where: {
userId,
linkId: Sequelize.col('links.id')
}
},
{
model: User,
attributes: ['id', 'name', 'about', 'username', 'picture']
}
]
})



Link.belongsToMany(User, { through: UserLink });
User.belongsToMany(Link, { through: UserLink });

我得到的错误
SequelizeEagerLoadingError: user_link is not associated to link!

我意识到 UserLink 本身是 User 和 Links 之间的关联表,这就是它没有关联的原因,但我需要通过传递表的 createdAt 对结果链接进行排序,并且能够获取用户。

最佳答案

假设您已经像这样定义了模型:

Link.hasMany(UserLinks, { foreignKey: 'link_id', as: 'userLinks' });
UserLink.belongsTo(Link, { foreignKey: 'link_id', as 'link' });

查询将是:
Link.findAll({
attributes: ['caption', 'id', 'url'],
order: [['userLinks', 'created_at', 'DESC']],
limit: 15,
include: [
{
model: UserLink,
as: 'userLinks',
attributes: ['created_at'],
required: true,
where: { userId }
},
],
});

请注意,您应该使用 require: true ,否则 Sequelize 将构建 LEFT JOIN

关于orm - 使用多个表和别名构建 sequelize 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57685248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com