首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用API平台中的日期过滤器在两个日期之间进行过滤

如何使用API平台中的日期过滤器在两个日期之间进行过滤
EN

Stack Overflow用户
提问于 2019-06-06 22:56:30
回答 2查看 3.8K关注 0票数 1

我将API Platform与Symfony 4一起使用,并尝试使用这里描述的日期过滤器:https://api-platform.com/docs/core/filters/

当我像这样使用过滤器时,....something?_page=1&lieferdatafter=2018-12-01&lieferdatbefore=2018-12-30

九头蛇响应显示括号是url编码的,我认为它不能正常工作,因为我得到的是所有结果,而不是过滤后的结果。在我的实体中,我添加了DateFilter作为任何其他过滤器,这似乎是正确的。

九头蛇回应:"something?lieferdat%5Bafter%5D=2018-12-01&lieferdat%5Bbefore%5D=2018-12-30&_page=1“

有没有人能解释我是否可以在我的请求中使用括号,或者更好:有人能为Api平台提供一个有效的日期过滤器实现,演示如何在两个日期之间进行过滤吗?

感谢你的建议,致以最美好的问候

EN

回答 2

Stack Overflow用户

发布于 2019-06-07 18:49:12

好的,我在回答我自己的问题..我的问题的答案是: symfony api平台能识别这些url编码的括号吗?答案是:是的。

在对Postman做了一些试验和错误之后,我让它工作起来了。

当我颠倒查询顺序时:

相反,

代码语言:javascript
复制
something?lieferdat[after]=2019-03-01&lieferdat[before]=2019-03-31

我把它改成了这个

代码语言:javascript
复制
something?lieferdat[before]=2019-03-31&lieferdat[after]=2019-03-01

它起作用了!

唯一的问题是,有时如果我指定了一个月,我有时会从前一个月得到1-2个值,这并不是我想要的,这让我感到困惑。我试着用

代码语言:javascript
复制
?lieferdat[strictly_before]=2019-03-31&lieferdat[strictly_after]=2019-03-01

但这并没有带来效果。

Edit2:好的,答案很简单,在我的实体中,我定义了搜索过滤器,但我没有定义这个过滤器适用的属性,所以它适用于该实体中的所有日期属性

仍然感谢您的任何帮助:)

票数 4
EN

Stack Overflow用户

发布于 2021-03-30 11:52:14

嗯,我不知道这个解决方案是否有帮助,但这是我通常做的事情……首先,请求的URL应该这样编码:

代码语言:javascript
复制
http://example.com/api/some-endpoint?availableDate.date%5Bstrictly_before%5D=2020-01-02&availableDate.date%5Bstrictly_after%5D=2020-02-04&page=1

你的实体应该像这样注解:

代码语言:javascript
复制
@ApiFilter(
  DateFilter::class,
  properties={
       "availableDate"
  }

)

另请注意,您可以像这样过滤嵌入对象的属性:

代码语言:javascript
复制
 @ApiFilter(
  DateFilter::class,
  properties={
       "exampleProperty.embeddedProperty"
  }

)

其中"exampleProperty“是要过滤的实体内的字段,"embeddedProperty”是另一个实体(嵌入的实体)中字段的名称。

下面是我如何在JavaScript中创建用于发出AJAX请求的网址的示例:

代码语言:javascript
复制
export const setAvailableDateURLFilters = ( pag = null, before = null, strictlyBefore = null,after = null, strictlyAfter = null) =>{
let url = "/api/available-dates?";

if(before)
    url === "/api/available-dates?" ? (url += "date%5Bbefore%5D=" + before) : (url += "&date%5Bbefore%5D=" + before);
if(strictlyBefore)
    url === "/api/available-dates?" ? (url += "date%5Bstrictly_before%5D=" + strictlyBefore) : (url += "&date%5Bstrictly_before%5D=" + strictlyBefore);
if(after)
    url === "/api/available-dates?" ? (url += "date%5Bafter%5D=" + after) : (url += "&date%5Bafter%5D=" + after);
if(strictlyAfter)
    url === "/api/available-dates?" ? (url += "date%5Bstrictly_after%5D=" + strictlyAfter) : (url += "&date%5Bstrictly_after%5D=" + strictlyAfter);
if(pag)
    url === "/api/available-dates?" ? ( url += 'page=' + pag) : (url += '&page=' + pag);

return url;

}

你的回答是对的!我只是添加一些提示和信息!希望这能帮助到某个人。干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56480180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档