Yii2 no reconoce nuevos campos de una tabla de la BD

Hola a todos
Tengo un problema al crear nuevos campos en una tabla ya existente en la BD, pues Yii2 no los reconoce.
Es decir, creo un nuevo campo en la tabla, y después lo agrego al modelo correspondiente, pero no me muestra los nuevos datos en la vista (es en un grid), me dice (No definido), a pesar de si existir datos en ese campo.
Y cuando agrego ese campo al ModelSearch, me dice que no reconoce ese campo, que no existe.

Por que sucede esto?
Como solucionarlo?

Al parecer era problema con algo de la cache del navegador firefox, lo abri en chrome y ya salio bien.

Lo que si se demora un tiempo en aceptar el cambio, en ambos navegadores

Retomo la pregunta, pues en localhost si se resolvio el problema despues de varios minutos, pero cuando lo subi al servidor (debian 8), demora mucho en reconocer los nuevos campos

Que le pasará a Yii2 con los nuevos campos? será un bug?

Estoy con Centos y me actualiza de una vez, estas en el template advance o basic ?

Estoy usando el advance
Recuerdo cuando inicie el proyecto hace algunos años, esto no sucedía.
Después que actualice hace un tiempo el Yii2 a la version 2.0.40, es que me doy cuenta ahora cuando agrego nuevos campos a la BD que se demora un tiempo un asumir ese cambio.

Que navegador estar usando ? Te recomiendo la última versión de firefox, me trabaja muy bien, tengo la misma versión de Yii2

Uso Firefox 95.02 y tambien Chrome Versión 96.0.4664.93 (Build oficial) (64 bits), y sucede lo mismo con los dos.
Hace mas de 10 minutos que agregue otro campo nuevo en una vista de mysql, y aún Yii2 sigue diciendo que ese campo no existe.
En el modelo no da error, donde lo da es en el modelsearch

Generalmente los campos se agregan en models → Name.php, NameSearch.php, tienes q agregar en los rules,
public function rules() { }

public function attributeLabels()
{ }

[[‘campo1’,‘campo2’], ‘safe’],

1 Like

Correcto, asi mismo siempre lo he hecho.
Y a pesar de que lo pongo en la funcion: public function rules() { } sigue diciendo que no existe, y sí existe, pues lo verifique bien en la BD y está, tambien esta en las reglas del modelo. Es algo raro.

Un detalle que quizas influya, podria ser que los modelos inicialmente los generé con Gii, y ahora estos nuevos campos lo estoy agregando de forma manual??

Estoy usando como IDE PHPStorm, aunque pienso que eso no influya en nada

No importa si los genera con Gii, me paso lo mismo pero tenía el nombre del campo con letra mayus, y el campo era minus, verifique, usas mysql o postgresql ?

Uso MySQL, y verifique lo de las mayusculas/minusculas en el nombre del campo, y habia una letra diferente en el nombre “e” por “E”, parece que ese era el problema de que siempre me daba el error.

Pero aun así, demoró un rato en asimilar el cambio, es algo bastante raro, que al final sale bien, pero es algo molesto tener que esperar varios minutos, para ver los resultados, esto sucede solo cuando agrego nuevos campos en la BD, en los demás casos los cambios si salen al momento.

Creo que voy a tener que lidiar con ese problema, pero me quedo con la intriga de por que yii2 hace eso.

Muchas gracias por su ayuda y atención.

toma en cuenta el cache y la versión de Apache que usas, porq los cambios q le hago los realiza de inmediato, solo con iniciar sesión nuevamente

Uso XAMPP con Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.0
Revisare a ver si ahi es el problema

Podría ser que su aplicación esté almacenando en caché la estructura de sus tablas. Elimine el contenido de la carpeta “runtime/cache” de su aplicación y vea si se resuelve.

Pues era eso mismo que comentas jjmf, borre la cache y solucionado el problema, asimilo los cambios al momento.

Un detalle del que me di cuenta cuando estaba probando la solución, es que el problema solo se presentaba en campos nuevos cuando los tomaba de una vista, si los tomaba directo de la tabla no sucedía.

Pero bueno, ya se lo que tengo que hacer cuando me suceda de nuevo.

Muchas gracias a los dos por la ayuda

En general, ante cambios en la db:

  • usar migraciones
  • ajustar las rules del modelo (como mínimo poner los nuevos campos como safe). Solo si estos campos van a recibir input directo del usuario.
  • ajustar los attributeLabels() es opcional, pero ayuda
  • ajustar el PHPDoc al inicio de la clase modelo, también opcional, pero se agradece
  • si estás usando al app-advanced, puedes configurar DummyCache en el main-local.php para que reemplace los componentes de cache que se usan en produción mientras estás en desarrollo. Y por supuesto limpiar esa cache en produccion con cada migración.

Gracias por los consejos, los tendre en cuenta.
El ultimo que me dices de configurar DummyCache, nunca lo habia hecho, los demas si.