是否可以在计算字段上创建过滤器?
Is it possible to create a filter on a calculated field?
我有一个具有以下架构的实体:
id, name, ..., startDate, endDate
我还在我的实体中添加了一个计算字段,它给我状态:
public function getStatus() {
if (new \DateTime() < $this->getStartDate()) {
return 'planned';
}
if (new \DateTime() > $this->getEndDate()) {
return 'expired';
}
return 'published';
}
我想做的是能够在此字段上创建过滤器。我似乎无法在文档中找到它。我试过在它上面创建一个过滤器,就像在其他字段上创建过滤器一样,但是它没有出现在我的 swagger UI 界面中。
// config/services.yaml
services:
...
view.search_filter:
parent: 'api_platform.doctrine.orm.search_filter'
arguments:
$properties:
id: 'exact'
name: 'ipartial'
...
status: 'exact' // doesn't seem to work
tags: [ 'api_platform.filter' ]
...
我还查看了有关编写自定义过滤器的文档,但据我所知,它必须是现有的 属性。
您定义的过滤器扩展了一个 ORM 过滤器 (api_platform.doctrine.orm.search_filter
),这意味着过滤器最终将转换为数据库查询。
直到 检索行后,您的“计算字段”值才为人所知,因此无法将过滤器自动转换为查询。
您可以在 startDate
和 endDate
上添加一个 'date' 过滤器,让用户使用它们进行过滤,或者实施一个或两个 custom ORM filters 来公开此内部逻辑API 消费者。
我有一个具有以下架构的实体:
id, name, ..., startDate, endDate
我还在我的实体中添加了一个计算字段,它给我状态:
public function getStatus() {
if (new \DateTime() < $this->getStartDate()) {
return 'planned';
}
if (new \DateTime() > $this->getEndDate()) {
return 'expired';
}
return 'published';
}
我想做的是能够在此字段上创建过滤器。我似乎无法在文档中找到它。我试过在它上面创建一个过滤器,就像在其他字段上创建过滤器一样,但是它没有出现在我的 swagger UI 界面中。
// config/services.yaml
services:
...
view.search_filter:
parent: 'api_platform.doctrine.orm.search_filter'
arguments:
$properties:
id: 'exact'
name: 'ipartial'
...
status: 'exact' // doesn't seem to work
tags: [ 'api_platform.filter' ]
...
我还查看了有关编写自定义过滤器的文档,但据我所知,它必须是现有的 属性。
您定义的过滤器扩展了一个 ORM 过滤器 (api_platform.doctrine.orm.search_filter
),这意味着过滤器最终将转换为数据库查询。
直到 检索行后,您的“计算字段”值才为人所知,因此无法将过滤器自动转换为查询。
您可以在 startDate
和 endDate
上添加一个 'date' 过滤器,让用户使用它们进行过滤,或者实施一个或两个 custom ORM filters 来公开此内部逻辑API 消费者。