gpt4 book ai didi

search - 银条。在 ModelAdmin 中按日期范围搜索

转载 作者:行者123 更新时间:2023-12-04 21:48:33 24 4
gpt4 key购买 nike

我的数据对象中有日期属性。

如何在 ModelAdmin 中按日期范围搜索?

例如:“搜索日期大于 2007-13-01 且小于 2007-17-01 的所有项目”
或“搜索日期介于 2007-13-01 和 2007-17-01 之间的所有项目”

目前我只能使用 GreaterTranFilter 或 LessThanFilter 进行搜索,但不能同时使用两者。

class MyObject extends DataObject {
private static $db = [
"Date" => "Date",
];
private static $summary_fields = [
"Date" => "Date",
];

private static $searchable_fields = [
"Date" => [
"field" => "DateField",
"filter" => "GreaterThanFilter",
"title" => 'Date from ...'
],
];
}

此外,搜索字段必须使用日历(日期选择器)

DateField:
default_config:
showcalendar: true

您能举例说明如何按日期范围搜索吗?

最佳答案

有一个 WithinRangeFilter,但如果您仅使用配置,它不会让您走得太远。这是您真正需要按程序实现的事情。

通过重载 getSearchContext() 添加范围过滤器,然后重载 getList() 并检查日期范围的 q 请求参数,并将它们应用到列表中。

public function getSearchContext()
{
$context = parent::getSearchContext();
$context->getFields()->push(DateField::create('q[Start]','Start'));
$context->getFields()->push(DateField::create('q[End]','End'));

return $context;
}

public function getList()
{
$list = parent::getList();
$params = $this->getRequest()->requestVar('q');

$filters = [];
if(isset($params['Start'])) {
$filters['Date:LessThanOrEqual'] = $params['Start'];
}
if(isset($params['End'])) {
$filters['Date:GreaterThanOrEqual'] = $params['End'];
}

return $list->filter($filters);
}

关于search - 银条。在 ModelAdmin 中按日期范围搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42440841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com