gpt4 book ai didi

node.js - Sequelize 急切加载与表的关联

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:30 26 4
gpt4 key购买 nike

我已经在网站上遇到了几个问题,但我仍然看不出我在这里做错了什么,所以任何帮助将不胜感激。

我收到错误:

Organization (organizations) is not associated to User!

组织模型:

module.exports = function (sequelize, DataTypes) {
return sequelize.define('Organization', {

organizationID: {
primaryKey: true,
type: DataTypes.INTEGER(11),
allowNull: false,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
description: {
type: DataTypes.STRING,
allowNull: true,
}
},
{
tableName: "spa_vOrganization",
freezeTableName: true,
classMethods: {
associate: function (models) {
Organization.hasMany(models.User, {
as: 'users',
through: models.User_Tenant_Organization,
foreignKey: 'organizationID'
});
}
},
});
};

用户模型:

module.exports = function (sequelize, DataTypes) {
return sequelize.define('User', {
userID: {
primaryKey: true,
type: DataTypes.INTEGER(11),
allowNull: false,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
}
},
{
tableName: "spa_User",
freezeTableName: true,
classMethods: {
associate: function(models) {
User.hasMany(models.Organization, { as: "organizations", through: models.User_Tenant_Organization, foreignKey: 'userID'});
}
}
}
);
};

矩阵表模型:

module.exports = function (sequelize, DataTypes) {
return sequelize.define('User_Tenant_Organization', {

userTenantOrganizationID: {
primaryKey: true,
type: DataTypes.INTEGER(11),
allowNull: false,
},
userID: {
type: DataTypes.INTEGER(11),
allowNull: false,
},
organizationID: {
type: DataTypes.INTEGER(11),
allowNull: false,
},
tenantID: {
type: DataTypes.INTEGER(11),
allowNull: false,
},
},
{
tableName: "spa_User_Tenant_Organization",
freezeTableName: true,
});
};

我想做的只是拉回急切加载其组织的用户。这是我正在使用的:

models.User.findOne({where: {
email: body.email
}, include: [ {model:models.Organization, as: 'organizations'}]}).complete( function (err, user) {
// do something with the user
}

我尝试过在 UserOrganization 上使用和不使用 foreignKey 定义,没有任何区别。我显然对协会有一些误解。谁能告诉我哪里出错了?

最佳答案

我发现了问题。上面代码中的关联实际上是正确的 - 失败的是我的 models/index.js,它是由 yeoman Generator-Angular-Express-Sequelize 自动生成的

index.js 循环遍历模型文件,将它们导入到sequelize 对象中,并将副本存储在数组 db[] 中,然后尝试运行 classMethod Associate(),但它正在调用 models.options.associate( )而不是 models.associate():

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

我已经通过删除“.options”解决了这个问题,一切正常。

修复该问题的拉取请求可供引用:https://github.com/rayokota/generator-angular-express-sequelize/pull/7

关于node.js - Sequelize 急切加载与表的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664242/

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