我正在尝试导出数据的CSV文件,该文件当前显示在Silverstripe CMS的某个部分中,并按特定日期范围过滤。在导出全部内容时,它可以正常工作,但是我希望能够过滤导出的结果,以便它返回特定日期范围内的所有结果。
“我的数据库”有一列记录创建日期-格式为“ D-M-Y;我认为可以使用H-M-S来进行过滤,但是我不知道如何设置搜索过滤器。我了解,如果您使用可搜索字段然后导出,则仅导出过滤后的搜索结果,因此会假定这是最佳方法,但无法弄清楚如何实现。
任何建议将不胜感激。
-免责声明-我希望将其放在silverstripe论坛上,但由于某些原因我完全无法注册-我从未收到电子邮件确认。 ---
<?php
namespace AffiliateProgram;
use SilverStripe\Forms\GridField\GridField;
use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
use SilverStripe\Security\Permission;
use SilverStripe\ORM\DataObject;
class MemberBonus extends DataObject
{
private static $db = [
'Amount' => 'Currency',
'Confirmed' => 'Boolean',
'Level' => 'Int',
'Percentage' => 'Int'
];
private static $has_one = [
'Member' => 'AffiliateProgram\Member',
'MemberPayment' => 'AffiliateProgram\MemberPayment',
'PaymentType' => 'AffiliateProgram\PaymentType',
'ProgramType' => 'AffiliateProgram\ProgramType'
];
private static $summary_fields = [
'Amount' => 'Amount (USD)',
'Member.Email' => 'Email',
'Level',
'MemberPayment.PaymentType.Symbol' => 'Recieved As',
'Percentage' => 'Percentage Bonus Applied',
'ProgramType.Name' => 'Program Type',
'MemberPayment.Created' => 'Payment Date',
'Confirmed' => 'Confirmed?',
'MemberPayment.ID' => 'Payment ID'
];
}
表上还有一个DateCreated列。
答案 0 :(得分:3)
您可以通过getSearchContext()
将自定义搜索字段添加到ModelAdmin,并使用getList()
基于它们自定义查询。请参阅SilverStripe文档的this section。
下面是一个示例,其中排除了CreatedAt值低于搜索字段中提供的日期的结果(假设您的ModelAdmin仅管理MemberBonus):
<?php
use SilverStripe\Admin\ModelAdmin;
use SilverStripe\Forms\DatetimeField;
class MemberBonusAdmin extends ModelAdmin
{
...
public function getSearchContext()
{
$context = parent::getSearchContext();
$context->getFields()->push(new DatetimeField('q[CreatedAfter]', 'Created After'));
return $context;
}
public function getList()
{
$list = parent::getList();
$params = $this->getRequest()->requestVar('q');
if (!empty($params['CreatedAfter'])) {
$list = $list->exclude('CreatedAt:LessThan', $params['CreatedAfter']);
}
return $list;
}
}
要使范围正常工作,您只需要添加CreatedBefore字段并进行过滤。