账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    sequelize如何实现表的关联查询?
    64
    0

    comment表有一个主键id,记录评论

    likes表记录点赞,也有一个主键id,和一个commentId键,一篇comment可能会有好多likes

    现在用sequelize查表(需要查询comment列表,以及每个comment的likes列表)并处理,返回合适的数据结构给前端。

    要怎么做?

    关联:
    commentTable.hasMany(likeTable, {foreignKey: 'commentId', targetKey: 'id'});

    查询:

     comment: (params) => commentTable.findAll({
            ...params, include: [{
                model: likeTable,
                where:{commentId:sequelize.col('comments.id')}
            }]
        }),

    sql:

    Executing (default): SELECT `comments`.`id`, `comments`.`title`, `comments`.`comment`, `comments`.`replyUserId`, `comments`.`replyId`, `comments`.`articleId`, `comments`.`userId`, `comments`.`userNickname`, `comments`.`userAvatar`, `comments`.`isRead`, `comments`.`createdTime`, `comments`.`flag`, `likes`.`id` AS `likes.id`, `likes`.`userId` AS `likes.userId`, `likes`.`username` AS `likes.username`, `likes`.`commentId` AS `likes.commentId`, `likes`.`status` AS `likes.status` FROM `comment` AS `comments` INNER JOIN `likes` AS `likes` ON `comments`.`id` = `likes`.`commentId` AND `comments`.`id` WHERE `comments`.`replyUserId` = '0' AND `comments`.`isRead` = '0' AND `comments`.`flag` = 0;
    

    还是查不到结果

    原来sql语句用了inner join
    导致了没有数据
    把它改为left join就可以了

    comment: (params) => commentTable.findAll({
            ...params,
            include: [{
                model: likeTable,
                where:{commentId:sequelize.col('comments.id')},
                required:false  //left join
            }]
        }),
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 共 0 条
    • 从诂 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部