[英]Sequelize order by join table
我有一个Duel
类型,每个Duel
都有一个玩家列表。 这是我的查询和关系:
const duel = Duel.findByPk(id, {
include: duelRelations,
});
const duelRelations = [{
model: User,
as: 'players',
include: [{
model: DuelPokemon,
required: false,
as: 'duelPokemons',
}],
}, {
model: DuelActionLog,
required: false,
as: 'logs',
}];
关系:
// Each duel has many users
Duel.hasMany(User, {
foreignKey: 'duel_id',
as: 'players',
});
我想要得到的players
阵列通过排序createdAt
的领域duel_players
表。 我尝试了order
值的不同组合,但没有任何效果。 不知道怎么定义。
任何的想法?
谢谢
您应该使用sequelize.col()
在findByPk
选项的order
属性中指定要作为排序依据的连接表中的列。 每个按条目排序是一个包含两部分(列,然后是顺序)的数组,您可以传入多个条目以按多列排序。
我将duelRelations
移到选项中以使其更易于阅读。 在您的示例中,您将User
别名为players
, DuelPokemon
为duelPokemons
。 请注意,您需要为每个Model
定义这些关联。 您的问题提到了在您的示例中不存在的duel_players
,但我认为您的意思是说players.createdAt
。
const duel = Duel.findByPk(id, {
include: [
{
model: User,
as: 'players',
include: { // can be an object to include single table
model: DuelPokemon,
required: false,
as: 'duelPokemons',
},
},
{
model: DuelActionLog,
required: false,
as: 'logs',
},
],
order: [[sequelize.col('players.createdAt', 'DESC']],
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.