如何解决sequelize连表查询嵌套太深的问题,急急急 - CNode技术社区

如何解决sequelize连表查询嵌套太深的问题,急急急
发布于 8 年前 作者 Chen-WeiZhen 5119 次浏览 来自 问答

多表连接查询数据嵌套过深有没有遇到? 以前是连四张表成功时返回的数据。 大致一张发布表,一张评价表(谁回复谁),一张用户表,一张主题表。 有的对象其实不想嵌套的。比如 image.png 通过uid查找谁发布的,user对象里边的内容能否直接解放出去?

同理topicId查找到的主题 image.png 在comment评价中还有好几个一样的嵌套。救救 有没有什么方法合并,解决嵌套对象。???


 {
 "infoId": 1,
 "uid": 1,
 "topicId": 1,
 "content": "1",
 "like_count": 21,
 "post_count": 1,
 "updatedAt": "2018年06月06日T07:10:33.000Z",
 "user": {
 "uid": 1,
 "username": "陈二",
 "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIHmiadgySExiakKxsHobq70sxZDyic1BORkNqJ5nezISMeZoh1om6ysG53dbAoYjK0FetXV83O8icUiaw/132"
 },
 "topic": {
 "topicId": 1,
 "title": "孤独",
 "des": "你有朋友吗,有那种可以深夜想聊天,一个电话就能找到的朋友。没有吧"
 },
 "comments": [
 {
 "id": 2,
 "infoId": 1,
 "from_uid": 1,
 "to_uid": 1,
 "topic_id": 1,
 "content": "nidayede",
 "from": {
 "uid": 1,
 "username": "陈韦4"
 },
 "to": {
 "uid": 1,
 "username": "六六"
 }
 },
 {
 "id": 3,
 "infoId": 1,
 "from_uid": 1,
 "to_uid": 1,
 "topic_id": 1,
 "content": "nidayede",
 "from": {
 "uid": 1,
 "username": "琪琪"
 },
 "to": {
 "uid": 1,
 "username": "让她"
 }
 },
 {
 "id": 1,
 "infoId": 1,
 "from_uid": 1,
 "to_uid": 2,
 "topic_id": 1,
 "content": "1",
 "from": {
 "uid": 1,
 "username": "哈哈"
 },
 "to": {
 "uid": 2,
 "username": "陈"
 }
 }
 ],
 "thumbsUps": [
 {
 "id": 1,
 "infoId": 1,
 "uid": 1,
 "user": {
 "uid": 1,
 "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIHmiadgySExiakKxsHobq70sxZDyic1BORkNqJ5nezISMeZoh1om6ysG53dbAoYjK0FetXV83O8icUiaw/132"
 }
 },
 {
 "id": 2,
 "infoId": 1,
 "uid": 1,
 "user": {
 "uid": 1,
 "avatar": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIHmiadgySExiakKxsHobq70sxZDyic1BORkNqJ5nezISMeZoh1om6ysG53dbAoYjK0FetXV83O8icUiaw/132"
 }
 }
 ]
 }
11 回复

@OXOYO 邀请你看看

@chyingp 邀请解答试试书籍大神

let data=[{ user:1 }] let user={ 1:{} } 获取 user的数据 let uid=data[0].user console.log( user[uid])

这种?

来自酷炫的 CNodeMD

@zswnew 肯定不能这么写呀,这里由发布表,连表查了主题表,谁发布的用户表,评价表,评价表又连接了用户表,谁评价的。查出来都是对象

没毛病,结构是清晰的,只是层级的问题。 想直接查出来就是一层的貌似sequelize不支持,你可以翻翻issues 或者自己手动处理下查询结果。

@OXOYO sequelize支持原始查询,用原始查询写,问题迎刃而解

高级查询建议用 sql 语句,sequelize 这类的 orm 框架并不能完全取代手写 sql

sequelize有一个属性是attributes 比如:

city.findOne({
 attributes: {
 include: [
 [sequelize.literal('province.name'), 'province'],
 ],
 },
 where: { id: id },
 include: [{
 model: province
 },
})

这样可以吧要的东西留着 , 不要的使用exclude或者attributes排除就行了

@papandadj 搜索解决方案找到了这个答案,感谢

回到顶部

AltStyle によって変換されたページ (->オリジナル) /