Как построить отношения bookshelf.js после определения модели?
Я определил модель Книжной полки как
var Country = Bookshelf.Model.extend({
tableName: 'countries',
});
var Address = Bookshelf.Model.extend({
tableName: 'addresses',
country: function() {
return this.belongsTo(Country,'country_id');
},
});
Теперь я могу получить одну из моих моделей из базы данных
new Country({name:"Italy"}).fetch()
.then(function(country){
И создать и адрес
new Address({...}).save().then(function(address){
Но я не могу найти в документации, какой метод помог бы мне построить отношение "принадлежат". без ручной установки атрибута country_id на правильный.
Единственное, что я вижу для построения отношений, - это метод collection.create(object) ( http://bookshelfjs.org/), который описывается как удобство для создания модели из объекта, ее сохранения и добавив его в коллекцию; Я бы тоже не знал, как сделать последнюю часть.
В любом случае, collection.create, по-видимому, не доступен для model.related('collectionName'), когда collectionName ссылается на отношения hasOne или ownTo, поскольку они не представляют коллекции.
1 ответ
С тем, как вы делаете это, вам нужно будет сделать это вручную. Вы должны использовать обратное отношение как это:
var Country = Bookshelf.Model.extend({
tableName: 'countries',
addresses: function() {
return this.hasMany(Address);
}
});
var Address = Bookshelf.Model.extend({
tableName: 'addresses',
country: function() {
return this.belongsTo(Country,'country_id');
},
});
Тогда вы должны быть в состоянии сделать:
new Country({name: Italy}).fetch().then(function(italy) {
// also could be italy.related('addresses'), that would add
// the addresses collection to the "italy" model's "relations" hash
return italy.addresses().create({...});
}).then(function(address) {
// ... saved to the db with the correct address
});