如何在 sequelize.js 中有条件地加载关联?

Posted

技术标签:

【中文标题】如何在 sequelize.js 中有条件地加载关联?【英文标题】:How to load associations conditionaly in sequlize.js? 【发布时间】:2016-07-29 22:43:58 【问题描述】:
Post.findAndCountAll(
  include: [
    model: models.like,
    where:  userId: req.authSession.user.id  
  ]
).then( collection => 
  onSucess(collection);
);

如果帖子有来自用户的相关喜欢,这将加载帖子。但是,我想要的是加载所有用户的帖子并加载相关的类似内容(如果存在)。我可以使用 sequlize.js 以某种方式存档此行为吗?

【问题讨论】:

【参考方案1】:

您只需要将where 子句嵌套在上一层即可。

Post.findAndCountAll(
  where:  userId: req.authSession.user.id ,
  include: [model: models.like]
).then( collection => 
  onSucess(collection);
);

这将返回所有具有userId === req.authSession.user.id 的帖子,并将包括他们的喜欢(如果有的话)。

根据评论编辑

如果您想获得用户的喜欢,您可以恢复查询

Like.findAndCountAll( 
    where:  userId: req.authSession.user.id ,
    include: [  model: models.post  ]
);

【讨论】:

是的,但我只想要给定用户的类似内容,当我在这里发布时,我使用的完整请求被截断了。在现实生活中,它已经有了外部 where 方法。但这会返回所有喜欢的东西,随着时间的推移,这将是一个巨大的列表,如果有一个 l,我只想要一个经过身份验证的用户的喜欢。 谢谢,但还是不好。我不想要用户的喜欢。如果他喜欢给定的帖子,我想要用户的帖子等。所以结构应该类似于[postId, etc, like: null,[postId, etc, like: LikeObject,[postId, etc, like: LikeObject,[postId, etc, like: null],所以我想查询帖子,独立于是否存在点赞,但如果登录用户存在点赞,那么我也想包含它。如果不清楚,请告诉我,然后我会详细更新我的问题。

以上是关于如何在 sequelize.js 中有条件地加载关联?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 8 中有条件地加载两个子组件

如何在gdbinit函数中有条件地执行命令

在 angularjs 中有条件地引导应用程序

如何安装 sequelize.js 二进制文件?

即使 paranoid 设置为 true,Sequelize.js 仍会删除表行

如何在 React JS 中有条件地应用 CSS 类