通过连接表排序

问题描述 投票:0回答:1

我有一个

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
值组合,但没有任何效果。不知道如何定义。

有什么想法吗?

谢谢

javascript node.js sequelize.js
1个回答
3
投票

您应该使用

sequelize.col()
来指定连接表中要在
order
选项的
findByPk
属性中排序的列。每个按条目排序都是一个由两部分组成的数组(列,然后是顺序),您可以传入多个条目以按多列排序。

我将

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']],
});
© www.soinside.com 2019 - 2024. All rights reserved.