Configuración del filtro para el modelo relacionado en GridView

Estoy tratando de configurar el filtro para el modelo relacionado en el widget GridView de Yii2, pero sigo recibiendo el error, como que el valor del filtro debe ser un número entero.

He seguido esta pregunta . Ahora, tengo dos modelos Services.php y ServiceCharge.php .

En ServiceCharge.php la relación se configura como:

 public function getServiceName() { return $this->hasOne(Services::className(),['id'=>'service_name']); } 

En ServiceChargeSearch.php el código es así:

  $query, ]); $dataProvider->sort->attributes['serviceName.services'] = [ 'asc' => ['serviceName.services' => SORT_ASC], 'desc' => ['serviceName.services' => SORT_DESC], ]; $query->joinWith(['serviceName']); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andFilterWhere([ 'id' => $this->id, // 'service_name' => $this->service_name, 'room_category' => $this->room_category, 'charges_cash' => $this->charges_cash, 'charges_cashless' => $this->charges_cashless, ]) ->andFilterWhere(['LIKE', 'serviceName.services', $this->getAttribute('serviceName.services')]); return $dataProvider; } } 

y en mi Gridview está configurado así:

 [ 'attribute'=>'service_name', 'value'=>'serviceName.services', ], 

Que muestra correctamente el nombre de los servicios del modelo relacionado.

No puedo ver lo que estoy haciendo mal, pero el campo de filtro para el atributo de servicio no se muestra en absoluto.

En realidad, es mucho más simple de lo que parece.

  1. agregue el column_name al atributo seguro.

  2. agregue la combinación con query – like – $query->joinWith(['serviceName','roomCategory']);

  3. agregue la condición del filtro como:

     ->andFilterWhere(['like', 'services.services', $this->service_name]) ->andFilterWhere(['like', 'room_category.room_category', $this->room_category]); 
  4. si desea agregar ordenamiento, agregue el código como:

     $dataProvider->sort->attributes['service_name'] = [ 'asc' => ['services.services' => SORT_ASC], 'desc' => ['services.services' => SORT_DESC], ]; $dataProvider->sort->attributes['room_category'] = [ 'asc' => ['room_category.room_category' => SORT_ASC], 'desc' => ['room_category.room_category' => SORT_DESC], ]; 

Eso es. Tanto la clasificación como el filtrado de la tabla relacionada funcionan perfectamente.

Nota: Elimine la validación por defecto como entero para la columna relacionada y el filtrado predeterminado generado por gii contrario, generará un error.