2016-02-11 2 views
4

я не могу сделать мой GridView фильтра по любому полю, Сетка отображается нормально, но мой фильтр раздел отображается в пустом, это GridView декларация:Yii2 фильтра поля не отображается на GridView

GridView::widget([ 
      'dataProvider' => $dataProvider, 
      'filterModel' => $searchModel, 
      'columns' => [ 
       [ 
       'attribute'=>'nombre_sucursal', 
       'value'=>'sucursal.nombre_sucursal', 
       'filter' => ArrayHelper::map(Sucursal::find()->asArray()->all(), 'id_sucursal', 'nombre_sucursal'), 
       'label'=>'Sucursal' 
       ], 
       [ 
       'attribute'=>'nombre_materia', 
       'value'=>'materia.nombre_materia', 
       'label'=>'Materia' 
       ], 
       'fecha:datetime', 
      ], 
      'export'=>false 
     ]);?> 

это заявление мой searchModel и DataProvider:

$searchModel = new CalendarioSearch(); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

и моя модель поиска заключается в следующем:

class CalendarioSearch extends Model 
{ 
/* your calculated attribute */ 
public $nombre_sucursal; 
public $nombre_materia; 

/* setup rules */ 
public function rules() { 
    return [ 
    /* your other rules */ 
    [['nombre_sucursal'], 'safe'], 
    [['nombre_materia'], 'safe'] 
    ]; 
} 


public function search($params) { 
    $query = Calendario::find(); 
    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
     'pagination' => [ 
      'pageSize' => 20, 
     ], 
     'sort' => [ 
      'defaultOrder' => ['fecha'=>SORT_DESC], 
      'attributes' => [ 
       'nombre_sucursal' => [ 
        'asc' => [ 
         'id_sucursal' => SORT_ASC, 
         'fecha' => SORT_DESC 
        ], 
        'desc' => [ 
         'id_sucursal' => SORT_DESC, 
         'fecha' => SORT_DESC 
        ], 
       ], 
       'nombre_materia' => [ 
        'asc' => [ 
         'id_materia' => SORT_ASC, 
         'fecha' => SORT_DESC 
        ], 
        'desc' => [ 
         'id_materia' => SORT_DESC, 
         'fecha' => SORT_DESC 
        ], 
       ], 
       'fecha' => [ 
        'asc' => [ 
         'fecha' => SORT_ASC, 
        ], 
        'desc' => [ 
         'fecha' => SORT_DESC, 
        ], 
       ], 

      ], 
     ] 
    ]); 

    if (!($this->load($params) && $this->validate())) { 
     $query->joinWith(['sucursal']); 
     $query->joinWith(['materia']); 
     return $dataProvider; 
    } 

    $query->joinWith(['sucursal' => function ($q) { 
     $q->where('c_sucursal.id_sucursal LIKE "%' . $this->nombre_sucursal . '%"'); 
    }]); 

    $query->joinWith(['materia' => function ($q) { 
     $q->where('c_materia.id_materia LIKE "%' . $this->nombre_materia . '%"'); 
    }]); 

    return $dataProvider; 
    } 
} 

Документ, которым я следовал, был this.

+1

Вы настроили 'rules' в своей поисковой модели? –

+0

Откуда добавляется добавление? Это не обычный модельный класс, верно? – robsch

+0

Я просто обновляю вопрос с помощью полной модели поиска ʎɔuǝp. Робш, что ты имеешь ввиду, с обычной моделью, которую я продлил с модели? это нормально? или я должен перейти от конкретного класса searchmodel? –

ответ

2

Убедитесь, что у вас есть надлежащее rulese функции декларировать в CalendarioSearch например:

public function rules() 
{ 
    return [ 
     [['id_materia' ], 'integer'], 
     [['nombre_sucursal', 'materia' ], 'safe'], 
    ]; 
} 

и быть уверены, что вы используете один и то же имя фильтра и класс I ..

в фильтрации вы используете nombre_sucursal но в вашем классе вы используете $ nombreSucursal;

+0

Я просто обновляю вопрос с помощью правил, которые у меня есть в моей поисковой модели. –

+0

У меня есть обновленный ответ, предлагающий использовать то же самое имя .. в связанной части кода. – scaisEdge

+0

Спасибо, что эта работа для меня, с этим я вижу фильтры в сетке, и после этого мне нужно внести некоторые другие исправления в мой код, чтобы он работал. Я уточняю вопрос с другими исправлениями. Еще раз спасибо. –

Смежные вопросы