2014-11-18 3 views
5
나는 책장을 사용하여 hasMany 호출에 다음과 같은 오류를 받고 있어요

:bookshelf.js 관계 hasMany의 오류

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; 

용도 :

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

답변

8

내 모델을 문자열로 참조하고 Bookshelf의 registry plugin을 사용합니다. 내가 참조하는 문자열을 사용하여, 나는 .hasMany를 만들 때 다음

var userModel = /*do bookshelf things*/; 
bookshelf.model('User', userModel); 

:

var bookshelf = new Bookshelf(knex); 
bookshelf.plugin('registry'); 

은 그 때 나는 정의하고 모델을 만들 수 있습니다.

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

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);