gpt4 book ai didi

sequelize.js - 如何使用 Sequelize 跨 3 个表进行分组?

转载 作者:行者123 更新时间:2023-12-04 18:41:16 24 4
gpt4 key购买 nike

我的模型是:

module.exports = function(sequelize, DataTypes) {
var CommitFileStatistic;
return CommitFileStatistic = sequelize.define('CommitFileStatistic', {
additions: {
type: DataTypes.INTEGER,
allowNull: false
},
deletions: {
type: DataTypes.INTEGER,
allowNull: false
},
status: {
type: DataTypes.STRING,
allowNull: false
},
fileSize: {
type: DataTypes.INTEGER,
allowNull: true
},
levenshteinDelta: {
type: DataTypes.INTEGER,
allowNull: true
},
fileHash: {
type: DataTypes.STRING,
allowNull: true
}
}, {
classMethods: {
associate: function(models) {
CommitFileStatistic.belongsTo(models.Commit);
return CommitFileStatistic.belongsTo(models.SourceFile);
}
}
});
};

module.exports = function(sequelize, DataTypes) {
var SourceFile;
return SourceFile = sequelize.define('SourceFile', {
filename: {
type: DataTypes.STRING,
allowNull: false
}
}, {
classMethods: {
associate: function(models) {
return SourceFile.belongsTo(models.Repository);
}
}
});
};

module.exports = function(sequelize, DataTypes) {
var Commit;
return Commit = sequelize.define('Commit', {
sha: {
type: DataTypes.STRING,
allowNull: false
},
commitTime: {
type: DataTypes.INTEGER,
allowNull: false
},
message: {
type: DataTypes.TEXT,
allowNull: false
},
isParsed: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
}
}, {
classMethods: {
associate: function(models) {
Commit.hasMany(models.Branch);
return Commit.hasMany(models.Commit, {
as: 'Parent',
through: 'ParentCommit'
});
}
}
});
};

我想做一个基本上可以做的查询: SELECT COUNT(*) AS fileCount, sf.* FROM CommitFileStatistics cfs, Commits c, SourceFiles sf WHERE cfs.CommitId = c.id AND cfs.SourceFileId = sf.id AND c.RepositoryId = 2 GROUP BY cfs.SourceFileId ORDER BY fileCount DESC但是我想使用 ORM 而不是原始查询。这可能吗?

最佳答案

像这样的东西应该是你正在寻找的:

return CommitFileStatistic.findAll({
attributes: [[Sequelize.fn('COUNT', '*'), 'fileCount']],
include: [
{ model: Commit, attributes: [] },
{ model: SourceFile, attributes: [] }
],
group: ['SourceFileId'],
order: [['fileCount', 'DESC']]
});

这将导致以下查询:
SELECT 
`CommitFileStatistic`.`id`,
COUNT('*') AS `fileCount`,
`Commit`.`id` AS `Commit.id`,
`SourceFile`.`id` AS `SourceFile.id`
FROM
`commit_file_statistics` AS `CommitFileStatistic`
LEFT OUTER JOIN `commits` AS `Commit`
ON `Commit`.`id` = `CommitFileStatistic`.`CommitId`
LEFT OUTER JOIN `source_files` AS `SourceFile`
ON `SourceFile`.`id` = `CommitFileStatistic`.`SourceFileId`
GROUP BY `SourceFileId`
ORDER BY `fileCount` DESC;

这可能只适用于 sequelize 2.0 版:)

关于sequelize.js - 如何使用 Sequelize 跨 3 个表进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25700004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com