Relation bookschef.js hasMany error

I get the following error when calling hasMany 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; 

Using:

 new Role({ id: req.params.id }) .fetch({ require: true, withRelated:['users'] }) .then(function (role) { role.users().fetch().then(function(users) { console.log('users: ' + users); }); }) 
+5
source share
2 answers

I refer to my models as strings and use the Bookhelf plugin for the registry .

 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 .hasMany , I use the string for the link.

 users: function() { return this.hasMany( 'User', 'roleId' ); }, 
+8
source

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); 
+1
source

Source: https://habr.com/ru/post/1207129/


All Articles