例如,我有模型Student
和几个与之相关的模型。设为Class
,Absence
和Grade
。
此模型的定义:
var Student = sequelize.define('Student', {
class_id : DataTypes.INTEGER,
name : DataTypes.INTEGER,
gender : DataTypes.ENUM('male', 'female')
is_paid : DataTypes.BOOLEAN
})
var Class = sequelize.define('Class', {
name : DataTypes.STRING
})
var Absense = sequelize.define('Absense', {
student_id : DataTypes.INTEGER
date : DataTypes.DATEONLY,
})
var Grade = sequelize.define('Grade', {
student_id :
subject : DataTypes.ENUM('singing', 'dancing')
value : DataTypes.INTEGER
})
Absense.belongsTo(Student, { foreign_key : 'student_id' });
Grade.belongsTo(Student, { foreign_key : 'student_id' })
我想将端点添加到此模型的列表实体中。但我也想允许在此端点中使用可选过滤器。 所以这两种用法都是可能的:
GET api.acme.com/v0.1/users
GET api.acme.com/v0.1/users?
class=1,3
&gender=male
&is_paid=true
&absences=true
&avg_grade=gt:3
&limit=20&offset=0&order=avg_grade%20DESC
当我处理Student
中存在的参数时,这很简单:
var condition = {};
req.params.is_paid && condition.is_paid = boolean(req.params.is_paid);
req.params.gender && condition.gender = { $in : req.params.gender.split(',') };
req.params.class && condition.class = { $in : req.params.class.split(',') };
res.json(await Student.findAll({
where : condition,
limit : req.query.limit || 20,
offset : req.query.offset || 0,
order : req.query.order || 'id ASC'
}))
但是当我想添加工具absense
或avg_grade
过滤器时,我必须从sequelize中退出并为此编写原始查询,这将变得非常大。
现在我正考虑为此创建特殊的students_expanded
视图,但我想确定,我没有遗漏任何内容。有没有办法用Sequelize做到这一点?
答案 0 :(得分:0)
使用请求的模型添加show dbs
对象并过滤并在其上设置include
。
以下内容将显示所有缺席的学生:
required: true
平均成绩较为棘手,因为您需要汇总成绩以获得平均成绩 - 请参阅Average of grouped data in column using Sequelize