我有以下網址
/items/bus_stops_bus_drivers?filter[bus_drivers_id][_eq]=2&filter[bus_stops_id][_eq]=3
我用&一個連接兩個過濾器AND。我應該為操作員使用什么字符OR?
uj5u.com熱心網友回復:
一般來說,關于 REST 和 URI 查詢:
沒有標準的查詢語言,您需要自己發明并為其撰寫決議器。通常 URI 查詢只是一個過濾器陣列,在您的情況下:
{
filter: {
bus_drivers_id: {_eq: 2},
bus_stops_id: {_eq: 3}
}
}
我建議您使用陣列結構而不是自定義查詢結構,因為已經存在 URI 查詢決議器。所以不要a or b只是做類似的事情or(a,b)。
{
filter: {
_or: [
{
bus_drivers_id: {_eq: 2},
bus_stops_id: {_eq: 3}
},
{
bus_drivers_id: {_eq: 4},
}
]
}
}
這轉化為
/items/bus_stops_bus_drivers?
filter[_or][1][bus_drivers_id][_eq]=2
&filter[_or][1][bus_stops_id][_eq]=3
&filter[_or][2][bus_drivers_id][_eq]=4
另一種選擇是使用已經存在的 URI 查詢語言,如 RQL:https ://github.com/persvr/rql 雖然在這種情況下最好發送純 JSON 而不是為此苦苦掙扎,例如
/items/bus_stops_bus_drivers?filter={URI-encoded-JSON}
如果您需要非常復雜的東西,另一種選擇是使用像 OData 這樣的標準:http: //docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#_Toc31360954或者 GraphQL 是一種非 REST 替代方案。
Directus 案例:
Directus 的案例很有趣,如果您提供多個引數,它們默認使用邏輯 AND,并且根據此 github 問題,它們有一種特殊的方式來提供邏輯 OR:https ://github.com/directus/v8-archive/issues/ 1402目前它似乎也包含一個錯誤。
這是他們的示例查詢:
{ENDPOINT}}/_/items/banner_item?
filter[content_max_age][0][null]
&filter[content_max_age][1][logical]=or
&filter[content_max_age][1][gte]=2020-02-19
如果我們將其轉換為 JSON:
{
filter: {
content_max_age: [
{_null: ""},
{logical: "or", _gte: "2020-02-19"}
]
}
}
雖然通常我們會期待這樣的事情:
{
filter: {
content_max_age: {
_or: [
{_null: ""},
{_gte: "2020-02-19"}
]
}
}
}
從理論上講,這也應該起作用。
Directus 運算子在這里,但是從這個角度來看,它們的檔案記錄很差,我的意思是我什至不確定如何使用_null基于此檔案的,我只是在上面的代碼中猜到了:https ://docs.directus.io/reference /filter-rules.html
我認為您不能使用 REST API 在 URI 查詢中發送 JSON 型別過濾器,但不確定為什么不支持它。根據這篇文章,您需要使用 GraphQL 和 POST:https ://learndirectus.com/how-to-filter-the-directus-api/雖然如果您堅持使用 REST,那么上層 URI 查詢解決方案應該可以作業。
理論上總線驅動URI應該是這個,但我并不完全確定。
/items/bus_stops_bus_drivers?
filter[0][bus_drivers_id][_eq]=2
&filter[0][bus_stops_id][_eq]=3
&filter[1][logical]=or
&filter[1][bus_drivers_id][_eq]=4
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520173.html
標籤:休息网址筛选直向
