尝试在 Sequelize ORM 中的 queryGenerator.SelectQuery 添加关联时,无法读取未定义的属性“源”

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

Adi*_*ana 8

经历与您相同的错误并最终解决问题。

因为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)

希望这可以帮助你。