2

У меня есть 2 модели в API Strongloop LoopbackКак я могу обновить hasandbelongstomany отношения для нескольких моделей сразу в strongloop шлейфом

  • Продукты
  • Метки

Между этими 2 моделей я определил a hasAndBelongsToMany-relation. В моей CMS мне нужны функции массового обновления для моих продуктов, в которых я могу выбрать многие продукты и назначить много тегов за одно действие.

Как сэкономить их легко на моем Mysql-DB, без необходимости перебирать каждый продукт, затем перебирать каждый тег и связывать эти 2?

Я проверил документы и нашел функции добавления и удаления, но они соединяют только одну модель с одной связанной моделью. Есть ли loopback-функциональность, чтобы делать то, что я хочу?

+0

Любой? Должен ли я писать собственный SQL для повышения производительности? – Ernie

ответ

0

Я написал функцию настраиваемого (обновлено) вместе с помощником в службе:

/* 
* Add multiple objects to a relationship 
* @param {object} origin The object which hold the items 
* @param {array} data The new list to be inserted 
* @param {string} relation name of the relationship, for instance 'cats' 
*/ 
exports.updateManyRelations = function(origin, data, relation){ 
    //Destroy all old connections 
    return origin[relation].destroyAll().then(function(response){ 
    //All were deleted and nothing to add 
    if(!data || data.length == 0){return [];} 
    //We have a list to go through, do the dirty work! 
    return addMultipleRelationsToObject(origin[relation], data, []); 
    }).then(function(newList){ 
    // new items created 
    return newList 
    }, function(error){ 
    console.log(error); 
    }); 
} 

/* 
* Helper function to add multiple related objects to a object in a correct promise chain 
*/ 
var addMultipleRelationsToObject = function(objectRelation, list, newList){ 
    if(list && list.length == 0){return Promise.resolve(newList);} 
    var item = list.pop(); 
    if(!objectRelation.hasOwnProperty("add")){ 
    return Promise.reject("Relationship is wrong for: " + objectRelation); 
    } 
    return objectRelation.add(item.id).then(function(newlyAdded){ 
    newList.push(item); 
    return addMultipleRelationsToObject(objectRelation, list, newList); 
    }); 
} 
Смежные вопросы