Return flat object from sequelize with association
flatten, json, sequelize.js
Solution
Part of your issue is probably that your `result` is an array of model instances, so you might be having issues flattening it if you didn't call `toJSON` on the elements in the array. I provided code that would flatten your example:
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]);
}
});
});
You can also add `raw: true` as an option to `findAll`, which will flatten your object, but it will look like this:
[
{
"field1": "someval",
"field2": "someval1",
"assoc_table.field_a": 1,
"assoc_table.field_b": "someval"
},
...
]
Problem
I am working on converting all my queries in sequelize. The problem I have come across is that when select queries include associations (ex. one to many), the object I get is an array of nested objects. It looks something like: ``` [ { "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" } } ] ``` I tried to use different modules to flatten the objects (inside a loop, each object individually), but I always got an error telling that what I was trying to flatten were not just objects. Moreover, I would prefer avoiding the part where objects are flattened, and simply get a flat result with sequelize. The sequelize code looks something like this: ``` 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); }); ```