Podemos definirlos manualmente, pero es más rápido y cómodo utilizar el generador (gii). Hay que habilitarlo previamente (ver 'Crear aplicación')
http://localhost/miaplicacion/?r=gii
Repetimos esta operación para todas las tablas deseadas
IMPORTANTE: Antes de generar los modelos se debe comprobar que en el base de datos están definidas correctamente las relaciones entre las tablas. De esta forma, se crearán las relaciones entre los modelos generados
Una vez generados los modelos, se deben revisar para terminarlos de configurar segun las necesidades de nuestra aplicación.
En models/MODELO.php:
Revisamos el método rules(), para añadir o modificar reglas de validación. Ver más abajo el apartado “Reglas de Validación”
Si están correctamente definidas en la BD, se habrán generado automáticamente. Si no es así, habrá que introducirlas manualmente. Ver CActiveRecord: relaciones:
Modificaremos el método “attributeLabels” para escribir correctamente la descripción de cada atributo. Esta descripción aparecerá en los formularios, grids, vistas de detalle, etc…
Es muy conveniente definir el método _ _tostring(), que devolverá uno o varios atributos que describen al objeto.
public function __tostring(){ return $this->nombre; }
De esta forma generalizamos la forma en que se muestra la descripción de los modelos de una clase. En cualquier parte podremos poner:
$autor=Autores::model()->findByPk(23); echo $autor; //Como $autor es un objeto, se llamará a __tostring() y se mostrará lo que devuelva
Modificar el método search para quitar los atributos que no se utilizarán en las búsquedas
Podemos definir filtros con nombre (scopes), que utilizaremos en toda la aplicación, evitando tener que escribir continuamente las condiciones SQL a las que referencian. Ver CactiveRecord : scopes
También se puede definir un scope que se aplicará siempre en todas las búsquedas (find(), findAll(), etc…) . Para ello, hay que crear un método llamado defaultScope.
Revisaremos las reglas de validación del modelo, que comprobarán que los datos introducidos por el usuario son correctos de acuerdo a lo especificado por ellas. Ver CActiverecord: Reglas de Validación
Es habitual que tengamos atributos que admiten únicamente una lista restringida de valores, y que cada uno de ellos tenga un significado. Por ejemplo: el atributo estado de Usuarios, podría admitir los valores: P=Pendiente de validar, A=Activo, B=Bloqueado. Para que en las vistas podamos mostar la descripción de estos valores, o mostrar un desplegable en los formularios con los valores posibles, haremos lo siguiente:
En el modelo definiremos un método getATRIBUTOOptions() que devuelve un array con todos los valores permitidos, de la forma valor⇒descripcion:
function getEstadoOptions() { return array('P'=>'Pendiente de validar', 'A'=>'Activo', 'B'=>'Bloqueado'); }
Definimos también un método getATRIBUTOText() que me devolverá el texto asociado al valor actual del atributo:
function getEstadoText(){ if(!$this->estado) return ''; else return $this->estadoOptions[$this->estado]; }
(Fíjate que $this→estadoOptions llamará a getEstadoOptions(), que devolverá el array de valores.)
Así, en las vistas podremos utilizar $model→estadoText para mostrar la descripción del estado actual:
$model->estado='A'; echo $model->estadoText; //Devolverá 'Activo' }
Y en los formularios podremos utilizar $model→estadoOptions como lista de valores de un desplegable