Я хотел бы обновить таблицу соединений, чтобы добавить/удалить соответствующие записи (с книжными полками). Я думал, что это возможно с updatePivot, но это не сработало. Теперь я просто пытаюсь применить жесткий подход к удалению соответствующих записей соединений, но это даже не работает. Вот некоторые фрагменты.Обновление таблицы переходов с помощью bookshelfjs
Во-первых, структура таблицы:
resources table
-(id)
-(url)
tags table
-(id)
-(name)
resource_has_tags
-(resource_id)
-(tag_id)
Например, ресурс связан с нулем или более тегов. В таблице соединений есть запись для каждой связи. В частности, Initial case (create): Создать новый ресурс (id: 1), имеет отношение к тегу # 100, 101. Результат: таблица resource_has_tags имеет 2 записи (1 - 100 и 1 - 101). Второй случай (обновление): ресурс теперь должен быть связан с тегом 102, 103. resource_has_tags должен быть (1 - 102, 1 - 103).
модель файл ресурсов
tags: function() {
return this.belongsToMany('Tag', 'resource_has_tags', 'resource_id', 'tag_id');
},
getTags: function() {
return this.related('tags');
},
getTagsJSON: function() {
return this.getTags().map(function(i){
return {id: i.id, name: i.get('name')};
});
},
Пример создания метода контроллер ресурсов (это работает).
'create': function(req, res) {
var data = clean(req.body),
tags = [],
topics = [];
if (data.tags) {
tags = data.tags;
delete data.tags;
}
if (data.topics) {
topics = data.topics;
delete data.topics;
}
Resource.forge(data).save()
.then(function(model) {
Promise.all([
model.getTags().attach(tags),
model.getTopics().attach(tags)
])
.then(function(){
res.json(model);
})
.catch(function(err) {
res.json(err);
});
})
.catch(function(err) {
res.json(err);
});
Метод обновления моего контроллера ресурсов (это не удаляет и не обновляет таблицу соединений).
'update': function(req, res) {
var data = clean(req.body),
tags = [],
topics = [];
if (data.tags) {
tags = data.tags;
delete data.tags;
}
if (data.topics) {
topics = data.topics;
delete data.topics;
}
req.resource.save(data, {patch: 'true'})
.then(function(model) {
Promise.all([
model.getTags().updatePivot()
])
.then(function(){
res.status(204);
res.json();
})
})
.catch(function(err) {
res.json(err);
});
Вам необходимо использовать функции прикрепления и отсоединения, которые вы хотите сделать, используя функции книжной полки. Я считаю, updatePivot используется для обновления данных в точке, которая не является ключом foreignkey или otherkey – vbranden