SQL 续集
SQL to Sequelize
Sequelize 进行得很好,但我遇到了一个问题,我如何才能使这个声明对 Sequelize 有效,我正在测试 COUNT 函数并阅读文档。
SELECT videos.*, COUNT(*) AS views FROM views INNER JOIN videos WHERE views.videoId = videos.id GROUP BY videoId ORDER BY views DESC
我试过了
const data = await Views.count({
group: 'videoId',
include: [
{
model: Videos
},
],
});
但是 COUNT 忽略了 'include' 属性,显然我对它不起作用并不感到惊讶,但我无法得到类似的东西。
型号:Video.js
"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class Video extends Model {
}
Video.init({
title: { type: DataTypes.STRING, },
}, {
sequelize,
modelName: "Video",
defaultScope: {
attributes: { exclude: ["createdAt", "updatedAt"] }
},
});
return Video;
};
型号:View.js
"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class View extends Model {
static associate(models) {
this.belongsTo(models.Video, {
foreignKey: "videoId",
as: 'video'
});
}
}
View.init({
videoId: { type: DataTypes.INTEGER, },
}, {
sequelize,
modelName: "View",
defaultScope: {
attributes: { exclude: ["createdAt", "updatedAt"] }
},
});
return View;
};
控制器:
var v = await db.View.findAll({
attributes: [
[Sequelize.fn(`COUNT`, Sequelize.col("videoId")), 'count'],
],
group: ['videoId'],
include: ['video'],
})
console.log(JSON.parse(JSON.stringify(v)))
// output
[ { count: 8, video: { id: 1, title: 'k1' } } ]
Sequelize 进行得很好,但我遇到了一个问题,我如何才能使这个声明对 Sequelize 有效,我正在测试 COUNT 函数并阅读文档。
SELECT videos.*, COUNT(*) AS views FROM views INNER JOIN videos WHERE views.videoId = videos.id GROUP BY videoId ORDER BY views DESC
我试过了
const data = await Views.count({
group: 'videoId',
include: [
{
model: Videos
},
],
});
但是 COUNT 忽略了 'include' 属性,显然我对它不起作用并不感到惊讶,但我无法得到类似的东西。
型号:Video.js
"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class Video extends Model {
}
Video.init({
title: { type: DataTypes.STRING, },
}, {
sequelize,
modelName: "Video",
defaultScope: {
attributes: { exclude: ["createdAt", "updatedAt"] }
},
});
return Video;
};
型号:View.js
"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class View extends Model {
static associate(models) {
this.belongsTo(models.Video, {
foreignKey: "videoId",
as: 'video'
});
}
}
View.init({
videoId: { type: DataTypes.INTEGER, },
}, {
sequelize,
modelName: "View",
defaultScope: {
attributes: { exclude: ["createdAt", "updatedAt"] }
},
});
return View;
};
控制器:
var v = await db.View.findAll({
attributes: [
[Sequelize.fn(`COUNT`, Sequelize.col("videoId")), 'count'],
],
group: ['videoId'],
include: ['video'],
})
console.log(JSON.parse(JSON.stringify(v)))
// output
[ { count: 8, video: { id: 1, title: 'k1' } } ]