我正在使用featherjs v2.0.3和sequelize v3.29.0,我刚创建了三个模型,第三个模型与另外两个模型有关系。
我使用feathers-cli为每个生成服务,然后编辑每个的模型文件。
到目前为止,这么好,创建了表(使用PostgreSQL),创建了索引,feathersjs很好地处理了CRUD,但还没有外键。
所以,当我试图告诉featherjs模型之间的关系时,我遇到了麻烦。
当我将role_permission.belongsTo(permissions)
添加到role_permission
模型时,我收到此错误:
ReferenceError: permissions is not defined
正如我在Sequelize文档中看到的那样,模型在同一个“文档”中定义,因此我怀疑问题出在那里,但我不明白需要做什么。
最后,这里是permission
和role_permission
的模型定义的相关部分:
// permission-model.js - A sequelize model
module.exports = function(sequelize) {
const permission = sequelize.define('permissions', {
permission_id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV1,
primaryKey: true,
allowNull: false
}...
}, ...);
permission.sync();
return permission;
};
// role_permission-model.js - A sequelize model
module.exports = function(sequelize) {
const role_permission = sequelize.define('role_permissions', {
permission_id: {
type: Sequelize.UUID,
allowNull: false
}...
}, ...);
role_permission.belongsTo(permissions) //<-- undefined?
role_permission.sync();
return role_permission;
};
你有什么指示可以帮我解决这个问题吗? 谢谢!
答案 0 :(得分:4)
您需要导入权限模型。但它可能已经或可能没有定义。
这是我在github上从@mrpatiwi发现的一种方法,以确保在建立关联之前加载每个模型。
首先,当您需要定义关系时,添加一个名为associate的classMethod,它接受所有模型并设置关系。
module.exports = function(sequelize) {
const role_permission = sequelize.define('role_permisson', {
...
}, {
classMethods: {
associate(models) {
role_permission.belongsTo(models.permission);
},
},
});
// Don't add role_premission.sync() here
return role_permission;
};
然后,在module.exports函数末尾的src / services / index.js中,添加:
// Setup relationships
const models = sequelize.models;
Object.keys(models)
.map(name => models[name])
.filter(model => model.associate)
.forEach(model => model.associate(models));
sequalize.sync();
答案 1 :(得分:0)
我遇到了同样的问题,只需更改以下内容即可解决此问题:
role_permission.belongsTo(permissions)
对此:
role_permission.belongsTo(models.permissions)
(我今天(2018年8月9日)使用Feathers CLI生成了模型)