javascript - Sequelize 不对子嵌套查询排序

标签 javascript orm sequelize.js

我正在从具有多对多关系的嵌套模型中检索数据,按中间表中的字段排序。

共有三种模型:ProjectsProjectImagesTagsProjects 有自己的 order 字段,并且与另一个模型 ProjectImages 具有一对多关系。 ProjectImagesTags 具有多对多关系。 ProjectImagesTags 之间的中间表是 ProjectImagesTags,它有一个 order 字段来对显示的标签进行排序。

Tables

非常简单。 sequelize 中的模型如下所示:

const Projects = sequelize.define('Projects',
    {
        order: {
            type: DataTypes.INTEGER,
        },
        title: { type: DataTypes.STRING },
);
Projects.associate = function(models) {
    Projects.hasMany(models.ProjectImages);
};
const ProjectImages = sequelize.define('ProjectImages', {
        title: { type: DataTypes.STRING },
});
ProjectImages.associate = (models) => {
    ProjectImages.belongsToMany(models.Tags, {
        through: models.ProjectImagesTags,
    });
};
const Tags = sequelize.define('Tags',
    {
        name: { type: DataTypes.STRING },
    },
);
Tags.associate = function(models) {
    Tags.belongsToMany(models.ProjectImages, {
        through: models.ProjectImagesTags,
    });
};
const ProjectImagesTags = sequelize.define('ProjectImagesTags',
    {
        order: {
            type: DataTypes.INTEGER,
        },
    },
);

现在,如果我从 ProjectImages 查询数据,我可以按 ProjectImagesTags 中间表中的 order 字段进行排序。

models.ProjectImages.findOne({
    where: { id: 1 },
    include: [
        {
            model: models.Tags,
        },
    ],
    order: [
        ['order', 'ASC'], 
        [models.Tags, models.ProjectImagesTags, 'order', 'ASC']
    ],
})

但是如果我从 Projects 查询,包括 ProjectImages 并尝试使用 [models.Tags, models.ProjectImagesTags, 'order', ' ASC'] 和以前一样,不行。

models.Projects.findOne({
    where: { id: 1 },
    include: [
        {
            model: models.ProjectImages,
            include: [
                {
                    model: models.Tags,
                },
            ],
            order: [[models.Tags, models.ProjectImagesTags, 'order', 'ASC']]
        },
        {
            model: models.Tags,
        },
    ],
    order: [
        ['order', 'ASC'], 
        [models.ProjectImages, 'order', 'asc']
    ],
})

findAllfindById 的行为相同。

我尝试了所有可能的组合,包括文字和 docs不是很清楚。如果有人知道如何执行此查询,我将不胜感激。

最佳答案

order 属性仅在顶层有效(子查询上的任何排序都将丢失)。

order: [
    ['order', 'ASC'], 
    [models.ProjectImages, 'order', 'ASC'],
    [models.ProjectImages, models.Tags, models.ProjectImagesTags, 'order', 'ASC'],
],

关于javascript - Sequelize 不对子嵌套查询排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52838327/

相关文章:

hibernate - NHibernate.MappingException : No persister

javascript - Sequelize 查询 SELECT * FROM Table 只返回一行

javascript - 使用 Web3 从 Solidity 调用函数

javascript - 无法读取云功能中的托管文件

ruby - 能够从现有数据库生成模型/迁移脚本的 Ruby ORM

java - SQL Server JDBC : unable to create new native thread

mysql - 在应用程序启动时在 Nodejs 中创建重复表的 Sequelize

mysql - Sequelize Create 或 FindOrCreate 从不创建新记录,只更新以前的记录

javascript - 如何在 Javascript 中获取选定的 pdf 文本?

javascript - 为什么 React 中的钩子(Hook)变量没有保持我设置的状态?