我有两个表:“page”和“page_css”。我想要page和page_css之间是一对多的关系(一个页面包含多个page_css)。
参见表结构:
Page table structure:
Page_css table structure:
这是我正在使用的 Knex 查询:
var page = knex('page')
.where({ slug: req.params.slug })
.join('page_css', { 'page_css.page_id': 'page.id' })
.then(function(page) {
if (page) {
return res.json(page);
}
return res.send('page not found');
});
这是我得到的结果:
但我想要这样的结果:
我需要运行什么 SQL/Knex 查询才能得到上面的格式?
Knex 无法施展魔法,它“只是”构建正确 SQL 查询的查询生成器。
您需要将这个平面结果转换为您希望的对象。
const flatData = [{
id: 1,
slug: 'test',
page_id: 1,
css_file: 'main'
}, {
id: 1,
slug: 'test',
page_id: 1,
css_file: 'hero'
}];
const resultMap = flatData.reduce((result, row) => {
result[row.id] = result[row.id] || {
...row,
css_file: []
};
result[row.id].css_file.push(row.css_file);
return result;
}, {});
console.log(Object.values(resultMap));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)