我的应用程序中有一个功能,它充当带有博客帖子的活动源(类似于Tumblr)。在此页面的路径中,我的主查询位于我的博客帖子表中,我正在将包含其他元信息和注释的表连接到此表,以获取每个博客帖子的全功能卡片。这些表来自我的类别(对帖子进行分类),主题(感兴趣的主题),附加的文件(文件/图像)和评论(评论帖子)表。
使用我当前的查询,我可以毫无问题地加入所有这些表,但是我遇到了与博客文章中与父查询相关联的where子句的问题。当file
和comment
表加入时,会出现一个子查询,我认为这与博客帖子和那些表之间的关联类型有关,并以某种方式影响结果。
提供了架构和关联:
blog_post
协会
用户
类别
协会
主题
协会
文件和注释表在与此问题相关的架构文件中没有关联。
提供的是查询(请不要骆驼套管上面是别名列名称)
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;
答案 0 :(得分:5)
您可能需要在subQuery: false
方法的options
对象中添加findAll
。但是,sequelize文档中没有此选项,您可以在source code
中找到它。如果未设置,则默认为true
,并在查询中出现LIMIT
选项时添加您提到的子查询。
答案 1 :(得分:0)
我遇到了同样的问题。我将 subQuery:false 与where语句对象一起使用。
like:-
{
include:[{model:childrens,attributes:['id','firstName']}],
where:{'$childrens.id$':12}
subQuery:false
}
,但是请记住,如果要在where语句中使用内部表 那么您将必须使用:-
where:{'$childrens.id$':12}
因为如果您不使用'$',它将自动创建:
abcd(main table).childrens.id=12
因此要检查子代ID的ID值,您将 必须使用'$'。
就是这样。希望它对您有用。