2017-01-06 9 views
0

Я работаю над преобразованием всех моих запросов в sequelize. Проблема, с которой я столкнулся, заключается в том, что когда выбранные запросы включают ассоциации (например, один к многим), объект, который я получаю, представляет собой массив вложенных объектов.Возврат плоского объекта из sequelize with association

Это выглядит примерно так:

[ 
    { 
    "field1": "someval", 
    "field2": "someval1", 
    "assoc_table": { 
     "field_a": 1, 
     "field_b": "someval" 
    } 
    }, 
    { 
    "field1": "someval", 
    "field2": "someval3", 
    "assoc_table": { 
     "field_a": 5, 
     "field_b": "someval" 
    } 
    }, 
    { 
    "field1": "someval", 
    "field2": "someval3", 
    "assoc_table": { 
     "field_a": 12, 
     "field_b": "someval" 
    } 
    } 
] 

Я пытался использовать различные модули для выравнивания объектов (внутри цикла, каждый объект по отдельности), но я всегда получал ошибку, говорящую, что я пытался придавить были не просто объектами.

Кроме того, я бы предпочел избежать части, где объекты сплющены, и просто получить плоский результат с sequelize.

Код sequelize выглядит примерно так:

models.table1.findAll({ 
    attributes: ['field1', 'field2'], 
    where: {field1: someval}, 
    include: [{model: models.assoc_table, required: true, attributes:['field_a', 'field_b']}] 
}).then(function (result) { 
    res.send(result); 
}).catch(function(error) { 
    console.log(error); 
}); 

ответ

0

Часть вашего вопроса, вероятно, что ваш result представляет собой массив экземпляров модели, так что вы можете быть возникли проблемы выпрямления, если вы не звонили toJSON на элементах массива. Я при условии, что код будет сглаживаться ваш пример:

result.forEach(obj => { 
    Object.keys(obj.toJSON()).forEach(k => { 
     if (typeof obj[k] === 'object') {  
      Object.keys(obj[k]).forEach(j => obj[j] = obj[k][j]); 
     } 
    }); 
}); 

Вы также можете добавить raw: true в качестве опции findAll, который будет сплющить ваш объект, но это будет выглядеть следующим образом:

[ 
    { 
    "field1": "someval", 
    "field2": "someval1", 
    "assoc_table.field_a": 1, 
    "assoc_table.field_b": "someval" 
    }, 
    ... 
]