获取silverstripe中两个日期之间的值

时间:2016-05-05 05:46:16

标签: sql silverstripe datefield

我添加了两个日期字段。我想检索这两个table.PaymentDate和ChequePostedDate之间的数据是两个字段。所以我需要获得两个日期之间的行。

简单搜索内容有两个日期字段。我想检索这两个日期之间的行(数据)

public function __construct($modelClass, $fields = null, $filters = null) {

    $fields = new FieldList(array(

        DateField::create('PaymentDate','Payment Date : from')
            ->setConfig('dateformat', 'yyyy-MM-dd')
            ->setConfig('showcalendar', true)
            ->setAttribute('placeholder','YYYY-MM-DD')
            ->setDescription(sprintf(
                _t('FormField.Example', 'e.g. %s', 'Example format'),
                Convert::raw2xml(Zend_Date::now()->toString('yyyy-MM-dd'))
            )),
        DateField::create('ChequePostedDate','cr Date : to')
            ->setConfig('dateformat', 'yyyy-MM-dd')
            ->setConfig('showcalendar', true)
            ->setAttribute('placeholder','YYYY-MM-DD')
            ->setDescription(sprintf(
                _t('FormField.Example', 'e.g. %s', 'Example format'),
                Convert::raw2xml(Zend_Date::now()->toString('yyyy-MM-dd'))
            )),

        ));

    $filters = array(

        'PaymentDate'      =>  new PartialMatchFilter('PaymentDate'),
        'ChequePostedDate'      =>  new PartialMatchFilter('ChequePostedDate'),


    );

    parent::__construct($modelClass, $fields, $filters);
}

public function getQuery($searchParams, $sort = false, $limit = false, $existingQuery = null) {

    $dataList = parent::getQuery($searchParams, $sort, $limit, $existingQuery);

    $params = is_object($searchParams) ? $searchParams->getVars() : $searchParams;

    $query = $dataList->dataQuery();

    if(!is_object($searchParams)) {
        if (isset($params['PaymentDate'])&& $params['ChequePostedDate'] ) {
            $query->where('`PaymentNote`.PaymentDate BETWEEN \''.$params['PaymentDate'].' \' AND \''.$params['ChequePostedDate'].'\'');
        }
    }
    return $dataList->setDataQuery($query);
}

}

2 个答案:

答案 0 :(得分:0)

我解决了.. 只需删除$ filters

即可
$filters = array(

   // 'PaymentDate'      =>  new PartialMatchFilter('PaymentDate'),
    //'ChequePostedDate'      =>  new PartialMatchFilter('ChequePostedDate'),


);

然后它起作用

答案 1 :(得分:0)

您还可以使用c = 0; for ii = 1:length(A) c = c+1; end 之类的内容,但您需要根据此论坛回复使用WithinRangeFiltersetMin()方法:official documentation

setMax()