Sha*_*eef 5 javascript mysql node.js sequelize.js
我正在尝试使用 QueryGenerator.selectQuery 生成查询。
let query = models.sequelize.dialect.QueryGenerator.selectQuery('table', {
include: [{
model: models.Users,
where: {
deleted: false
},
required: true,
attributes: ['id']
}],
where: {
createdAt: {
[Op.between]: [o.start, o.end]
},
deleted: false
},
attributes: [[models.sequelize.fn("COUNT", models.sequelize.col("Table.id")), 'count']]
}, models.Table).slice(0, -1);
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误。
类型错误:无法读取 Object.generateJoin (/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1433:30) at Object.generateInclude (/node_modules/sequelize/lib/dialects/) 处未定义的属性“源” abstract/query-generator.js:1358:24) 在 Object.selectQuery (/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1001:34)
github 问题跟踪器https://github.com/sequelize/sequelize/issues/8751
经历与您相同的错误并最终解决问题。
因为QueryGenerator在内部使用 for Sequelize,它没有关于此的特定文档(不幸的是)。我们应该“解析”的使用对象选择模式,我们之前传递参数成selectQuery。
根据您的查询,我认为您可以这样做。请注意以下代码未经测试并使用es6样式
// Import sequelize model library
const Model = require("sequelize/lib/model");
// Separate your query options
const queryOptions = {
include: [{
model: models.Users,
where: {
deleted: false
},
required: true,
attributes: ['id']
}],
where: {
createdAt: {
[Op.between]: [o.start, o.end]
},
deleted: false
},
attributes: [[models.sequelize.fn("COUNT", models.sequelize.col("Table.id")), 'count']]
};
// Parse the queryOptions, this operation would serialize the queryOptions
// and this is the important process about building the query
Model._validateIncludedElements.bind(DB.SuitCase)(queryOptions);
// Execute with serialized options object
let query = models.sequelize.dialect.QueryGenerator.selectQuery('table', queryOptions, models.Table);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助你。