请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

for循环查询

七月老师你好,我有个问题请教一下:

我在学习此课程,另外把学习到的知识在做一个博客项目,遇到了一个查询的问题:

文章下有评论以及分类,在查询文章列表时候,同时去查询每篇文章的分类详情,和评论的总数。

第一种方法是:使用for循环,在内部异步查询,这样是可以达到我预期结果,不知道这样是否可以呢?我记得你在课程里面说不要在for循环里面查询数据库。

     // 获取文章列表
    static async getArticleList() {
        const article = await Article.scope('iv').findAll({
            where: {
                deleted_at: null
            },

        });

        for (let item of article) {
            // 查询对应文章的分类详情
            const cateogry = await CategoryDao.getCategory(item.getDataValue('category_id'));
            item.setDataValue('cateogry', cateogry);

            // 查询对应的文章评论总数
            const comments_num = await ArticleDao._getArticleComments(item.getDataValue('id'));
            item.setDataValue('comments_num', comments_num);
        }

        return article;
    }

     // 查询对应的文章评论总数
   static async _getArticleComments(article_id) {
        return await Comments.count({
            where: {
                article_id
            }
        })
    }

第二种方法:

 // 获取文章列表
    static async getArticleList() {
        const article = await Article.scope('iv').findAll({
            where: {
                deleted_at: null
            },

        });

        const articleIds = [];
        const categoryIds = [];
        article.forEach(article => {
            articleIds.push(article.id);
            categoryIds.push(article.category_id);
        });

        const category = await this._getArticleCategoryDetail(categoryIds);
        const comments = await this._getArticleComments(articleIds);
        
        // 这样查询出来不知道如何合并到 article 里面,article是一个数组

        return article;
    }

第二种方法,查询出来的分类和评论数据不知道如何合并到 article 里面,article是一个数组。

请七月老师指点一下,谢谢。

正在回答

1回答

第一种方法,我觉得不可取。但是如果第二种方法做不出来,用也可以,但是要限制好查询条数。不能无限制的循环查询。

第二种方法,我不太清楚为什么无法合并,即使是数组,但是数组下面的每个元素都应该有相应的分类、和评论,你需要首先设计好结构:

比如:

分类下面放文章,文章下面放评论。这肯定是可以通过3层循环遍历出来的。

0 回复 有任何疑惑可以回复我~
  • 提问者 梁凤波 #1
    谢谢七月老师的指导,我认真思考了一下,用第二种方法完成了。评论列表有关联的文章ID对应,然后文章表里面有分类ID对应 分类表,代码上传到GitHub develop分支:https://github.com/liangfengbo/nodejs-koa-blog/blob/develop/app/dao/article.js,学习了老师的课程,不断改进中,受益匪浅,谢谢。
    回复 有任何疑惑可以回复我~ 2019-06-13 14:16:10
  • 提问者 梁凤波 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-06-13 14:20:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信