繁体   English   中英

按连接表顺序排列

[英]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别名为playersDuelPokemonduelPokemons 请注意,您需要为每个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM