gpt4 book ai didi

sequelize.js - Sequelize 别名关联的急切加载错误

转载 作者:行者123 更新时间:2023-12-03 22:33:28 25 4
gpt4 key购买 nike

嗨,我有以下 index.js

var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var CONFIG = require('../config/config');

var sequelize = new Sequelize(CONFIG.database, CONFIG.user, CONFIG.password, {
host: CONFIG.host,
dialect: CONFIG.dialect,
port: CONFIG.port,
operatorsAliases: Sequelize.Op,
logging: false
});

var db = {};


fs.readdirSync(__dirname)
.filter(function (file) {
return (file.indexOf('.') !== 0) && (file !== 'index.js');
})
.forEach(function (file) {
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});

Object.keys(db).forEach(function (modelName) {
if ('associate' in db[modelName]) {
db[modelName].associate(db);
}
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;
我想包含两次不同条件的模型,所以我计划在这种情况下使用别名:
module.exports = function (sequelize, DataTypes) {
var TSection = sequelize.define('TSection', {
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING(500),
allowNull: true
},
TestId: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
field: 'test_id',
references: {
model: 'test',
key: 'id'
}
},
},
{
tableName: 't_sections'
});

TSection.associate = function (models) {
TSection.belongsTo(models.Test), {
foreignKey: 'id',
as: 'sections'
},
TSection.hasMany(models.TQuestion), {
foreignKey: 'id'
}
};

return TSection;
};
module.exports = function (sequelize, DataTypes) {
var Test = sequelize.define('Test', {
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING(500),
allowNull: true,
},
},
{
tableName: 'tests'
})
Test.associate = function (models) {
Test.hasMany(models.TSection), {
foreignKey: 'id'
}
}

return Test;
};
当我尝试获取以下信息时:
const test = await Test.findOne({
attributes: ['id', 'name'],
include: [{
model: TSection,
attributes: ['id', 'name'],
}, {
model: TSection,
as: 'sections'
}]
});
我有这个错误,我不知道是什么原因造成的:
注意:我尝试了几种组合,包括和不包括上述模型
UnhandledPromiseRejectionWarning: Error: Error: SequelizeEagerLoadingError: TSection is associated to Test using an alias. You've included an alias (sections), but it does not match the alias(es) defined in your association (TSections).
如果你想知道我的目标是计算总部分的数量,但只检索一个(匹配给定条件的)
谢谢!

最佳答案

您在关联中添加了额外的括号。它们应该如下所示:

TSection.associate = function (models) {
TSection.belongsTo(models.Test, {
foreignKey: 'id',
as: 'sections'
});
TSection.hasMany(models.TQuestion, {
foreignKey: 'id'
});
};
Test.associate = function (models) {
Test.hasMany(models.TSection, {
foreignKey: 'id'
})
}

关于sequelize.js - Sequelize 别名关联的急切加载错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64518283/

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