Javascript Sequelize未对子列表查询排序
我从一个具有多对多关系的嵌套模型中检索数据,该模型按中间表中的字段排序 有三种模型:Javascript Sequelize未对子列表查询排序,javascript,orm,sequelize.js,Javascript,Orm,Sequelize.js,我从一个具有多对多关系的嵌套模型中检索数据,该模型按中间表中的字段排序 有三种模型:项目、项目图像和标记。 Projects有自己的order字段,并且与另一个模型projectmages有一对多关系投影图像具有多对多关系,带有标记。 projectmages和Tags之间的中间表是projectmagestags,它有一个order字段来对显示的标记进行排序 非常简单。sequelize中的模型如下所示: const Projects = sequelize.define('Projects
项目
、项目图像
和标记
。
Projects
有自己的order
字段,并且与另一个模型projectmages
有一对多关系<代码>投影图像具有多对多关系,带有标记
。
projectmages
和Tags
之间的中间表是projectmagestags
,它有一个order
字段来对显示的标记进行排序
非常简单。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,
},
},
);
现在,如果我从projectmages
查询数据,我可以通过projectmagestags
中间表中的order
字段进行排序
models.ProjectImages.findOne({
where: { id: 1 },
include: [
{
model: models.Tags,
},
],
order: [
['order', 'ASC'],
[models.Tags, models.ProjectImagesTags, 'order', 'ASC']
],
})
但是如果我像以前一样从项目
中查询,包括项目图像
,并尝试从那里使用[models.Tags,models.projectmagestags,'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']
],
})
与findAll
或findById
的行为相同
我尝试了包括文字在内的所有可能的组合,但结果不是很清楚。如果有人知道如何进行此查询,我将不胜感激 order属性仅在顶层有效(子查询上的任何排序都将丢失)
嗯,我明白了……所以我必须在一级申报订单;在订单声明中,我必须引用第一个嵌套模型和第二个嵌套模型,以及中间表。它起作用了。
order: [
['order', 'ASC'],
[models.ProjectImages, 'order', 'ASC'],
[models.ProjectImages, models.Tags, models.ProjectImagesTags, 'order', 'ASC'],
],