yii2 - 通过从 yii2 中的日期选择器输入来搜索数据

标签 yii2

在本例中,搜索模型中的 sql 查询是 -

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

我在index.php 文件中添加了一个日期范围选择器。代码是 -

<?=  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'
    ]
]);
?>

Controller

public function actionIndex()
    {
        $searchModel = new PartiesSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

    /**
     * Displays a single Parties model.
     * @param integer $id
     * @return mixed
     */
    public function actionView($id)
    {
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

index.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>

这不起作用。请告诉我需要做什么。

最佳答案

类似这样的事情

在 GridView 之前的 View 中

<?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(); ?>

在 Controller 中

public function actionIndex(){

    $searchModel = new PartiesSearch();
    $dataProvider = $searchModel->search(\Yii::$app->request->get());

    return $this->render('index', compact('dataProvider', 'searchModel'));
}

在您的搜索模型中

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;
    }

关于yii2 - 通过从 yii2 中的日期选择器输入来搜索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37692672/

相关文章:

jquery - 如何将 Ajax 与 Jquery 和复选框结合使用

php - 在具有多个 where 子句的 Active Record 中使用 find()

MySql 在 Yii2 中有条件地选择最小值、最大值而没有子选择

mysql - Yii2 查询 - join 在 MySQL 查询中出现两次

php - 返回邮件在 Yii 2 的基本邮件类中发送失败的错误

php - Yii2:如何禁用或只读 Select2 小部件?

php - Yii2 - 如何从 Yii::$app->user 获取当前用户名或名称?

php - Yii2:如何强制使用后备 MessageFormatter 方法?

php - 如何使用 php/mysql 预加载或类似方法优化 mysql 查询

php - Yii2 MySQL - 如何使用 findUniqueIndexes 方法?