放置在 Sequelize 中的 WHERE 子句中的值,PostgreSQL 以获取所有内容

Posted

技术标签:

【中文标题】放置在 Sequelize 中的 WHERE 子句中的值,PostgreSQL 以获取所有内容【英文标题】:Value to place inside a WHERE clause in Sequelize, PostgreSQL to get everything 【发布时间】:2019-02-13 07:35:09 【问题描述】:

我有这段代码:

return User.findAll(where: , include:[
  model: UserInfo, where: 
    gender: genderPreference
  
]

我想在 genderPreference 中传递这样一个值,以便它为我提供所有值。目前我正在传递“男性”或“女性”,这会相应地为我提供数据库中的数据;但如果对任何性别都没有偏好,那么我不知道该怎么做。 我试过 null, " " , "" ;但它们都不起作用。有什么解决办法吗? 谢谢。

【问题讨论】:

【参考方案1】:

我实际上用不同的方法解决了这个问题。放置:

gender: null

实际上搜索数据库中的性别字段是否为空,所以我不得不用不同的方法解决它。我想要数据库中的“所有数据”。 所以,这几乎解决了它:

 if(req.body.genderPreference == "none")
    conditionalUserInfo = model: UserInfo, where:;
 else 
    conditionalUserInfo = model: UserInfo, where: gender: req.body.genderPreference;

return User.findAll(where: , include:[
  conditionalUserInfo
]

GenderPreference 参数包含“男性”或“女性”或“无”。

【讨论】:

【参考方案2】:

有一种更好的方法可以在没有 if/else 子句的情况下实现您的需求

return User.findAll(where: , include:[
 
    model: UserInfo,
    where: req.body.genderPreference ?  gender: req.body.genderPreference  : 
  
]

如果身体存在,则允许数据库搜索,如果身体不存在,则返回所有性别偏好。我相信这是一个更简洁的代码。

【讨论】:

【参考方案3】:

不要在null 上使用引号,它会正常工作

return User.findAll(where: , include:[
  model: UserInfo, where: 
    gender: null
  
]

见the tutorial for more information

【讨论】:

嘿,埃文,感谢您的尝试,但仅放置 null 并不能解决问题。即使将性别设为空,我仍然没有从数据库中获得任何数据。我猜数据库也会尝试匹配我们输入的空值。 不太可能,输出语句日志并检查您的 sequelize 发送到数据库的内容。可以使用sequelize***.com/a/21431627/124486或者postgresql的log_min_statement SELECT "User"."id","User"."email"...(other sql here)........INNER JOIN "UserInfos" AS "UserInfo" ON "User"."id" = "UserInfo"."userId" AND "UserInfo"."gender" IS NULL; 我把它当作我的 sql。有什么问题吗?

以上是关于放置在 Sequelize 中的 WHERE 子句中的值,PostgreSQL 以获取所有内容的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize:WHERE LIKE 子句中的 Concat 字段

Sequelize - 在 where 子句中查询其他表

使用 sequelize 包含列的 where 子句

sequelize 嵌套包含 where 子句

使用 Node 和 sequelize 关联对象的 Where 子句

在 sequelize where 子句中使用 ILIKE(JSON 列)