I'm getting the following error on a hasMany
call using Bookshelf:
A valid target model must be defined for the roles hasMany relation
Role.js
var Data = require('../server-includes/Data'),
User = require('./User');
var Role = Data.bookshelf.Model.extend({
tableName: 'roles',
users: function() {
return this.hasMany(User, 'role_id');
}
});
module.exports = Role;
User.js
var Data = require('../server-includes/Data'),
Role = require('./Role');
var User = Data.bookshelf.Model.extend({
tableName: 'users',
role: function() {
return this.belongsTo(Role, 'id');
},
};
module.exports = User;
Usage:
new Role({ id: req.params.id })
.fetch({ require: true, withRelated:['users'] })
.then(function (role) {
role.users().fetch().then(function(users) {
console.log('users: ' + users);
});
})
I reference my models as strings, and use Bookshelf's registry plugin .
var bookshelf = new Bookshelf( knex );
bookshelf.plugin( 'registry' );
Then I define and create a model:
var userModel = /*do bookshelf things*/;
bookshelf.model( 'User', userModel );
Then when I create a .hasMany
, I use a string to reference.
users: function() {
return this.hasMany( 'User', 'roleId' );
},
post.js
Bookshelf.plugin('registry')
var Category = require('./category')
var Post = Bookshelf.Model.extend({
tableName: 'posts',
hasTimestamps: true,
categories: function () {
return this.belongsTo('Category', 'category_id');
},
});
module.exports = Bookshelf.model('Post',Post);
category.js
Bookshelf.plugin('registry');
var Post = require('./post');
var Category = Bookshelf.Model.extend({
tableName: 'categories',
hasTimestamps: true,
posts : function () {
return this.hasMany('Post');
}
});
module.exports = Bookshelf.model('Category', Category);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.