放置在 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_statementSELECT "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 字段