我有一个我的用户需要能够搜索的项目数据库。他们可以将不同的过滤器,例如category,searchTerm,itemType。
我知道如何在knex查询中应用这些过滤器,但是不确定如何有条件地组合它们。例如,在一种情况下,用户仅输入searchTerm。因此,我不想按类别或项目类型进行筛选,而仅按searchTerm进行过滤。但是,我只希望有一个knex函数,可以有条件地向查询中添加额外的子句。
就像是:
const getFilteredItems = (searchCriteria) => knex('items')
// IF (searchCriteria.searchTerm)
.where('items.itemName', 'like', `%${searchCriteria.searchTerm}%`)
// IF (searchCriteria.itemType)
.where('items.itemType', '=', searchCriteria.itemType)
// IF (searchCriteria.category)
.where('items.category', '=', searchCriteria.category)
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何有条件地将额外的where子句附加到knex查询中。有没有编写原始SQL的优雅方法?
我正在设置一个http对我的服务器上的端点的超级简单调用,该端点返回一个JSON响应 - 一个带有successprop 的对象,它是一个布尔值.这是相关代码:
getData : Model -> Cmd Msg
getData { userId, data } =
let
url =
"/get-data?userId=" ++ userId ++ "&data=" ++ data
request =
Http.get url decodeGetData
in
Http.send GetDataResult request
decodeGetData : Decode.Decoder Bool
decodeGetData =
Decode.at [ "success" ] Decode.bool
Run Code Online (Sandbox Code Playgroud)
我从编译器收到以下错误:
Http.send GetDataResult request
^^^^^^^
Function `send` is expecting the 2nd argument to be:
Http.Request String
But it is:
Http.Request Bool
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题?如何设置Http.send以期望Bool而不是字符串?我知道我的请求的基本设置是正确的,因为我的代码编译,如果我将decodeGetData函数更改为:
decodeGetData : Decode.Decoder String
decodeGetData = …Run Code Online (Sandbox Code Playgroud)