别名关联上的 Sequelize eager loading 错误
Sequelize eager loading error on alias asociation
你好我有以下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).
如果你想知道我的 objective 是计算总节数,但只检索一个(符合给定条件的那个)
谢谢!
您在关联中添加了额外的括号。它们应该看起来像这样:
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'
})
}
你好我有以下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).
如果你想知道我的 objective 是计算总节数,但只检索一个(符合给定条件的那个)
谢谢!
您在关联中添加了额外的括号。它们应该看起来像这样:
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'
})
}