Amy
Amy

Reputation: 29

My filter on index.php is not working

The model is Booking.php. I need to get data from another model called ServiceCategory.php and add a filter to it in Gridview on my index.php. I created filter on view/index.php as below.

['label' => 'Service Category', 'attribute' => 'category.name', 'filter' => ArrayHelper::map(app\models\Servicecategory::find()->where(['status' => true])->asArray()->all(), 'id', 'name')],

This is my index.php

<?php

use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\grid\GridView;
use app\models\Servicecategory;

/* @var $this yii\web\View */
/* @var $searchModel app\models\BookingSerach */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Bookings';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="list-booking">

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

    <p class="form-inline text-right">
        <label>Client:</label>
        <?= Html::dropDownList('client', null, ArrayHelper::map($clients, 'id', 'fullname'), ['prompt' => 'Please Select', 'class' => 'form-control']) ?>
        <?= Html::a('+ New Booking', ['booking/create/'], ['class' => 'btn btn-primary client-create']) ?>
    </p>

    <?=
    GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'id',
            ['label' => 'Client', 'value' => 'user.client.view', 'format' => 'raw'],
            'postCode',
            'start',
            'end',
            ['label' => 'Service Category', 'attribute' => 'category.name', 'filter' => ArrayHelper::map(Servicecategory::find()->where(['status' => true])->asArray()->all(), 'id', 'name')],
            //'numberOfDays',
            //'date',
            //'followUpEmail:email',
            // 'followUpEmailSent:ckeckbox',
            //'Status',
            ['attribute' => 'status', 'value' => 'Status', 'filter' => array_filter(\app\models\Booking::$statuses)],
            ['class' => 'yii\grid\CheckboxColumn',
                'header' => 'follow Up',
                'checkboxOptions' => function($model, $key, $index) {
                    $url = \yii\helpers\Url::to(['booking/followup/' . $model->id]);
                    return ['onclick' => 'js:followUp(this, "' . $url . '")', 'checked' => false, 'id' => 'followup'];
                }
            ],
            ['class' => 'yii\grid\ActionColumn',
                'headerOptions' => ['style' => 'width:15%'],
                'template' => '{view} {approval} {update} {delete} ',
                'buttons' => [
                    'view' => function ($url, $model) {
                        return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', ['/booking/review/' . $model->id], [
                                    'title' => Yii::t('app', 'Review'),
                        ]);
                    },
                    'approval' => function ($url, $model) {
                        return Html::a('<span class="glyphicon glyphicon-ok"></span>', ['/booking/approval/' . $model->id], [
                                    'title' => Yii::t('app', 'Additional Details'),
                                    'class' => 'error',
                        ]);
                    },
                ],
            ],
        ],
    ]);
    ?>
</div>
<?php
$script = <<< JS
    $('.client-create').on('click', function () {
        select = $(this).prev();
        if(select.val()){
            location.href = $(this).attr('href')+"/"+select.val();
        } else {
            $(this).parent().addClass('has-error');
        }
        return false;
    });
JS;
$this->registerJs($script);

$this->registerJs("
    function followUp(e, url){  

    $('#modal').modal('show').find('#modalContent').load(url);

    }", yii\web\View::POS_END);
?>

I can get the data to the column on gridview but the filter is not working. Can anyone help me with this?

Upvotes: 1

Views: 85

Answers (1)

Amy
Amy

Reputation: 29

I solved it myself. For your information I post it here. I changed the attribute as the model contains and added the value as category.name

['attribute' => 'categoryID', 'value' => 'category.name','filter' => ArrayHelper::map(Servicecategory::find()->where(['status' => true])->asArray()->all(), 'id', 'name')],

Upvotes: 1

Related Questions