gpt4 book ai didi

sequelize.js - Sequelize 关联导致子查询

转载 作者:行者123 更新时间:2023-12-03 22:16:27 43 4
gpt4 key购买 nike

我的应用程序中有一个功能可以作为博客文章的事件提要(类似于 Tumblr)。在此页面的 route ,我的主要查询是在我的博客文章表上,我正在加入包含附加元信息和评论的表格,以便为每个博客文章提供功能齐全的卡片。这些表来自我的类​​别(对帖子进行分类)、主题(感兴趣的主题)、附加的文件(文件/图像)和评论(对帖子进行评论)表。

使用我当前的查询,我可以毫无问题地加入所有这些表,但是我遇到了与博客文章中父查询关联的 where 子句的问题。当filecomment表被加入时会发生一个子查询,我认为这与博客文章和这些表之间的关联类型有关,并以某种方式影响结果。

提供了架构和关联:

blog_post

  • blog_id
  • 日期
  • 内容
  • category_id
  • topic_id

  • 协会
  • 属于(用户,{外键:'user_id'});
  • 属于(类别,{外键:'category_id'});
  • 属于(主题,{外键:'topic_id'});
  • hasMany(file, {外键: 'blog_id' });
  • hasMany(comment, { foreignKey: 'blog_id' });

  • 用户
  • 用户 ID
  • 名字
  • 姓氏
  • 组织 ID

  • 类别
  • category_id
  • 类别

  • 协会
  • hasMany(blog_post, {外键:'category_id'})

  • 话题
  • topic_id
  • 话题

  • 协会
  • hasMany(blog_post, {外键:'topic_id'})

  • 文件和注释表在其架构文件中没有与此问题相关的关联。

    提供的是查询(请不要驼峰式大小写是上面的别名列名)
    models.BlogPost.findAll({
    order: 'Date DESC',
    include: [{
    model: models.User,
    where: { organizationId: req.user.organizationId },
    attributes: ['userId', 'firstName', 'lastName'],
    required: false,
    },
    {
    model: models.Topic,
    attributes: ['topic'],
    required: false
    },
    {
    model: models.Category,
    attributes: ['category'],
    required: false
    },
    {
    model: models.File,
    attributes: ['file'],
    required: false
    },
    {
    model: models.Comment,
    include: [{
    model: models.User,
    attributes: ['userId','firstName', 'lastName']
    }],
    required: false
    }],
    limit: 10
    })

    更新子查询:
    SELECT `blog_post`.*, `user`.`user_id`, `user`.`first_name`, `user`.`last_name`, `topic`.`topic_id`, `topic`.`topic`, `category`.`category_id`, `category`.`category_name`, `file`.`file_id`, `file`.`file`, `comment`.`comment_id`, `comment`.`comment`, `comment`.`blog_id`, `comment`.`user_id`, `comment`.`created_at`, `comment`.`updated_at`, `comment`.`blog_id`, `comment`.`user_id`, `comment.user`.`user_id`
    FROM (SELECT `blog_post.`blog_id`, `blog_post.`date`, `blog_post.`title`, `blog_post.`content`, `blog_post.`topic_id`, `blog_post.`category_id`, `blog_post.`user_id`, `blog_post.`created_at`, `blog_post.`updated_at`, `blog_post.`user_id`, `blog_post.`topic_id`, `blog_post.`category_id` FROM `blog_post LIMIT 10) AS `blog_post
    LEFT OUTER JOIN `user` AS `user` ON `blog_post.`user_id` = `user`.`user_id` AND `user`.`organization_id` = 1
    LEFT OUTER JOIN `topic` AS `topic` ON `blog_post.`topic_id` = `topic`.`topic_id`
    LEFT OUTER JOIN `category` AS `category` ON `blog_post.`category_id` = `category`.`category_id`
    LEFT OUTER JOIN `file` AS `file` ON `blog_post.`blog_id` = `file`.`blog_id`
    LEFT OUTER JOIN `comment` AS `comment` ON `blog_post.`blog_id` = `comment`.`blog_id`
    LEFT OUTER JOIN `user` AS `comment.user` ON `comment`.`user_id` = `comment.user`.`user_id`
    ORDER BY date DESC;

    最佳答案

    您可能需要添加 subQuery: falseoptions findAll 的对象方法。但是,此选项在 sequelize 文档中不存在,您可以在 source code 中找到它。 .如果未设置,则默认为 true并导致添加您在 LIMIT 时提到的子查询选项存在于查询中。

    关于sequelize.js - Sequelize 关联导致子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42439183/

    43 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com