📜  sequelize 4 sort on join table 属性 (1)

📅  最后修改于: 2023-12-03 15:34:56.390000             🧑  作者: Mango

Sequelize 4 - 在关联表上排序
介绍

Sequelize是一个基于Node.js的ORM库,它提供了许多强大的功能,如支持多种数据库、查询链式调用等。其中,在Sequelize中进行关联查询时,我们可以使用include选项来指定要关联的表,但有时我们需要在关联的表上进行排序,这就需要用到order选项了。

语法

在定义查询条件时,使用include选项来指定要关联的表,并使用order选项来指定要对关联表排序的属性。

Model.findAll({
  include: [
    {
      model: OtherModel,
      order: [['属性名', 'ASC/DESC']]
    }
  ]
});

注意:如果关联的表不止一个,需要使用嵌套数组来指定每个表要排序的属性。

示例

假设我们有两个表:UserPost,它们之间存在一对多的关系(即一个用户可以发多篇文章)。

const User = sequelize.define('User', {
  id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
  name: DataTypes.STRING
});

const Post = sequelize.define('Post', {
  id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
  title: DataTypes.STRING,
  content: DataTypes.TEXT
});

User.hasMany(Post);
Post.belongsTo(User);

现在,我们通过查询User表来获取所有用户,同时关联查询他们的文章,并按发布时间排序。

User.findAll({
  include: [
    {
      model: Post,
      order: ['createdAt', 'DESC']
    }
  ]
});

这将返回一个包含所有用户及其文章的结果集,每个用户下的所有文章按发布时间降序排列。

结论

在进行Sequelize的关联查询时,使用include选项可以方便地关联多个表。而使用order选项则可以在关联表上对指定属性进行排序,让查询结果更符合我们的需求。