通过从yii2中的datepicker获取输入来搜索数据

通过从yii2中的datepicker获取输入来搜索数据,yii2,Yii2,在这种情况下,搜索模型中的sql查询为- $query = (new Query()) ->select (['billdate','billno','bills_partyname','billamount']) ->from('bills') ->where(['between', 'billdate', 'from_date', 'to_date']); 我在index.php文件中添加了一个daterangepicker。该守则是— <?

在这种情况下,搜索模型中的sql查询为-

$query = (new Query())
    ->select (['billdate','billno','bills_partyname','billamount'])
    ->from('bills')
    ->where(['between', 'billdate', 'from_date', 'to_date']);
我在index.php文件中添加了一个daterangepicker。该守则是—

<?=  DatePicker::widget([
    'name' => 'from_date',
    'value' => '2014-01-01',
    'type' => DatePicker::TYPE_RANGE,
    'name2' => 'to_date',
    'value2' => '2016-01-01',
    'pluginOptions' => [
        'autoclose'=>true,
        'format' => 'yyyy-mm-dd'
    ]
]);
?>
php看起来像

<?php

use yii\helpers\Html;
use kartik\grid\GridView;
use kartik\date\DatePicker;
use kartik\daterange\DateRangePicker;
use kartik\form\ActiveForm;
//use dosamigos\datepicker\DatePicker;
use frontend\modules\districtreport\models\ExpartiesSearch;

/* @var $this yii\web\View */
/* @var $searchModel frontend\modules\districtreport\models\PartiesSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Parties';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="parties-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

<!--     <p>
        <?= Html::a('Create Parties', ['create'], ['class' => 'btn btn-success']) ?>
    </p> -->
    <!-- <div class="custom-filter">

    Date range:
     <input name="start" />
     <input name="end" />

    </div> -->




<?= '<label class="control-label">Select Date Range</label>'; ?>
<?=  DatePicker::widget([
    'model' => $searchModel,
    'attribute' => 'from_date',
    'value' => '2014-01-01',
    'type' => DatePicker::TYPE_RANGE,
    'attribute2' => 'to_date',
    'value2' => '2016-01-01',
    'pluginOptions' => [
        'autoclose'=>true,
        'format' => 'yyyy-mm-dd'
    ]
]);
?>
        <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'export' => false,
        'columns' => [
        // [
        //     'class' => 'kartik\grid\ExpandRowColumn',
        //     'value' => function($model, $key, $index, $column){
        //         return GridView::ROW_COLLAPSED;
        //     },
        //     'detail' => function($model, $key, $index, $column){
        //         $searchModel = new ExpartiesSearch();
        //         $searchModel-> parties_district = $model['district'];
        //         $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        //         return Yii::$app->controller->renderPartial('_exparties', [
        //             'searchModel' => $searchModel,
        //             'dataProvider' => $dataProvider,
        //             ]);                   

        //         },
        //     ], 
            // 'district', 
            // 'sell',
            // 'collection',
        'billdate',
        'billno',
        'bills_partyname',
        'billamount',

        ],
    ]); ?>
</div>


这是行不通的。请告诉我需要做什么。

开始日期是通过post/Get方法获得的。请尝试此方法

$query = (new Query())->select (['billdate','billno','bills_partyname','billamount'])->from('bills')->where(['between', 'billdate', $_POST['from_date'], $_POST['to_date']]);
像这样的事

在GridView之前的视图中

<?php

$form = ActiveForm::begin([
    'method' => 'get',
    'enableClientScript' => false
]);

?>
<?= '<label class="control-label">Select Date Range</label>'; ?>
<?=  DatePicker::widget([
    'model' => $searchModel,
    'attribute' => 'from_date',
    'value' => '2014-01-01',
    'type' => DatePicker::TYPE_RANGE,
    'attribute2' => 'to_date',
    'value2' => '2016-01-01',
    'pluginOptions' => [
        'autoclose'=>true,
        'format' => 'yyyy-mm-dd'
    ]
]);
?>

<?php echo Html::submitButton('Search') ?>

<?php ActiveForm::end(); ?>
在您的搜索模型中

class PartiesSearch extends Parties
{
    public $from_date;
    public $to_date;


    //add rule

    public function rules(){
        return [
            //... your rules,
            [['from_date', 'to_date'], 'safe']
        ];
    }

    //... some code

    public function search($params = []){

        $query = (new Query())
            ->select (['billdate','billno','bills_partyname','billamount'])
            ->from('bills');

        $dataProvider = new ActiveDataProvider([
            'query' => $query
        ]);

        if( !($this->load($params) && $this->validate()) ){
            return $dataProvider;
        }

        if($this->from_date && $this->to_date)
            $query->where(['between', 'billdate', $this->from_date, $this->to_date]);

        return $dataProvider;
    }

您没有使用模型来创建日期范围选择器,因此请使用模型或从更改名称

'name' => 'from_date'


*类似于to_date

请给出您的
index.php
GridView::widget()代码,上面已经给出了显示类名的日期选择器。使用哪种扩展?@维塔利没有理解你。请告诉我您需要什么详细信息。DatePicker widget form Yii framwork或其他扩展?您可以给我您的控制器代码,或者通过echo打印检查提交数据后的具体内容添加搜索功能,或者在DatePicker配置中添加
'model'=>$searchModel
选项,并覆盖
名称
名称2
attribute
attribute2
@Vitaly-你的意思是在'name'=>'from_date'之前添加'model'=>$searchModel,?将name name2改为attribute2?@kandarpatel-我已经在问题中给出了搜索函数。@Tanmay是这样吗?具体问题在哪里?获取未定义的变量:Gridview小部件行中的searchModel-'filterModel'=>'searchModel',更改为
'filterModel'=>$searchModel
对不起。我打错了。它已经是'filterModel'=>$searchModelUndefined变量:模型行-$dataProvider=$model->search(\Yii::$app->request->get());语法错误,此权限
$searchModel->search(\Yii::$app->request->get())
class PartiesSearch extends Parties
{
    public $from_date;
    public $to_date;


    //add rule

    public function rules(){
        return [
            //... your rules,
            [['from_date', 'to_date'], 'safe']
        ];
    }

    //... some code

    public function search($params = []){

        $query = (new Query())
            ->select (['billdate','billno','bills_partyname','billamount'])
            ->from('bills');

        $dataProvider = new ActiveDataProvider([
            'query' => $query
        ]);

        if( !($this->load($params) && $this->validate()) ){
            return $dataProvider;
        }

        if($this->from_date && $this->to_date)
            $query->where(['between', 'billdate', $this->from_date, $this->to_date]);

        return $dataProvider;
    }
'name' => 'from_date'
'name' => 'PartiesSearch[from_date]'