소셜 네트워킹 사이트의 프로필 시스템을 만들고 있습니다. 관계를 사용하여 다른 테이블의 사용자에 대한 다양한 정보를 표시하는 데 문제가 있습니다. 여기 내 BookshelfJS 모델 두 가지가 있습니다 :BookshelfJS hasOne 관계에 유효한 대상 모델을 정의해야합니다.
룸 :
var user = require(__base + '/app/database/models/user/user').model;
exports.model = Application.Adapter.Model.extend({
tableName: 'rooms',
hasTimestamps: false,
owner: function() { return this.hasOne(user, 'id', 'owner_id'); }
});
사용자 :이 모델의
var user_badges = require(__base + '/app/database/models/user/user_badges').model,
user_settings = require(__base + '/app/database/models/user/user_settings').model,
rooms = require(__base + '/app/database/models/room/room').model,
groups = require(__base + '/app/database/models/group/group').model;
exports.model = Application.Adapter.Model.extend({
tableName: 'users',
hasTimestamps: false,
badges: function() { return this.hasMany(user_badges, 'user_id', 'id'); },
settings: function() { return this.hasMany(user_settings, 'user_id', 'id'); },
rooms: function() { return this.hasMany(rooms, 'owner_id', 'id'); },
groups: function() { return this.hasMany(groups, 'user_id', 'id'); }
});
모두 다른 페이지에 서로 완전히 분리 사용
. 현재 프로필 페이지의 사용자 모델에있는 모든 관계를 사용하고 있으며 그 관계가 작동 중입니다. 소유자 정보와 함께 객실에 대한 모든 정보를 표시하는 다른 페이지가 있습니다. 내가 hasOne의 & belongsTo를 모두 사용하여 시도했지만 얻이 수없는 것A valid target model must be defined for the rooms hasOne relation
: 나는 지금까지 내가 받고있어 오류가
var room = require(__base + '/app/database/models/room/room').model;
var room_id = 1;
return new room({id: room_id}).fetch({
withRelated: [
{'owner': function(qb) {
qb.column('id','username');
}}
],
columns: ['id', 'owner_id', 'name']
})
.then(function resolve(result)
{
if(result == null) return Promise.reject(new Error('invalid_room'));
return Promise.resolve(result.toJSON());
},
function reject(err)
{
return Promise.reject(err);
});
방 모델을 사용하고 있는데 어떻게 여기입니다 그것은 작동합니다, 누군가가 솔루션을 가지고 있다면 저에게 감사드립니다!
[Registry Plugin] (https://github.com/tgriesser/bookshelf/wiki/Plugin:-Model-Registry)에서 살펴보십시오. 관계를 훨씬 쉽게 정의 할 수 있습니다. – flaviodesousa