我正在使用Bookshelf与MySQL进行ORM。我有端点和组织。每个端点都属于一个组织,组织有许多端点。我试图获取与其关联组织的端点列表(s。)这将返回以下错误:
"必须为端点belongsTo关系定义有效的目标模型"
这是我的fetchAll请求:
Endpoint
.where('organization_id', req.user.attributes.organization_id)
.fetchAll({require: true,withRelated: ['settings', 'organization']})
.then((endpoints) => {
ReS(res, {
endpoints
}, 200);
})
这是我的终端模型:
'use strict';
const bookshelf = require('../config/bookshelf_instance');
const Organization = require('./organization');
const Settings = require('./endpoint_settings');
const Group = require('./endpoint_group');
module.exports = bookshelf.Model.extend({
tableName: 'endpoint',
organization () {
return this.belongsTo(Organization, 'id');
},
settings () {
return this.hasOne(Settings, 'id');
},
group () {
return this.belongsToMany(Group, 'map_endpoint_endpoint_group');
}
});
这是我的组织模式:
'use strict';
const bookshelf = require('../config/bookshelf_instance');
const Endpoint = require('./endpoint');
const User = require('./user');
const Group = require('./endpoint_group');
module.exports = bookshelf.Model.extend({
tableName: 'organization',
endpoints () {
return this.hasMany(Endpoint, 'organization_id');
},
users () {
return this.hasMany(User, 'organization_id');
},
groups () {
return this.hasMany(Group, 'organization_id');
}
});
答案 0 :(得分:1)
您应该从端点模型的关系规范中删除id
,因为这似乎是主键,而不是外键。默认情况下,外键也是organization_id
,这是您想要的。它应该与您在相反关系中的匹配(在这种情况下为hasMany
)。
从文档中,belongsTo
的第二个参数是:
此模型中的ForeignKey。默认情况下,foreignKey被假定为Target模型tableName的单数形式,后跟_id。
目标模型的表名是organization
,这意味着默认情况下外键为organization_id
。