logo

WikiJuanan: ManualCake/Modelos ...

Inicio | Indice De Paginas | Ultimas Modificaciones | Ultimos Commentarios | Usuarios | Registrarse | Conectar:  Contraseña:  

InstalaciónModelosControladoresVistasComponentsHelpersClasesFicherosDeConfiguraciónBake


Contenido


¿Qué es un modelo?

El modelo es la 'M' del patrón de diseño MVC.
Su función es separar el dominio de la lógica de la presentación, aislando la lógica de la aplicación.


Funciones de los modelos

Guardando los datos

Para guardar los datos en tus modelos, necesitas proporcionar los datos que deseas almacenar. Los datos que se pasan a la función «save()" deben pasarse como un array en el siguiente formato:
$datosParaGuardar = array('NombreDelModelo' => array('campo1' => 'valor', 'campo2' => 'valor'));


La orden «save()" que utilizaremos desde el controlador para guardar los datos en el modelo, y de paso en la base de datos si procede, quedaría así:
$this->Nombre Del Modelo?->save($datosParaGuardar, $validar, $listaDeCampos);


En donde $validar puede tomar los valores 'true' o 'false' y $listaDeCampos debe contener la lista de campos que pretendemos salvar en forma de array.
$listaDeCampos = array('campo1','campo2');


Para conseguir que los datos pasados a tu controlador tengan este formato, lo más fácil es usar HTML Helper, ya que éste crea elementos de formulario con los nombres apropiados que necesita Cake.


$html->input('Modelo/nombrecampo');


Si no quieres hacer esto asegurate que los elementos de tu formulario tengan nombres como data[Nombre Modelo?][nombrecampo].


Los datos enviados desde el formulario son automáticamente formateados de forma correcta y almacenados en la variable "$this->data" dentro de tu controlador, por tanto salvar los datos desde un formulario web es algo instantaneo.


Buscando y obteniendo datos

findAll()

Si quiero introducir una clausula order en una tabla con asociaciones, por ejemplo al usar un “findAll” tengo que usar en la clausula el nombre del modelo («Usuario”) y no el de la tabla («usuarios”)


read($fields,$id)

Esta función sirve para obtener los campos del registro actual o del registro especificado por $id.


Es importante notar que sólo obtendrá los modelos directamente asociados con el modelo invocado, independientemente del valor de la variable $recursive. Para obtener niveles adicionales usa find() o findAll().


Diferencias entre modelos y controladores

Aunque las diferencias entre modelos y controladores son claras en la teoría, en la práctica me he encontrado ya un par de veces pensando donde colocar una determinada función.


El criterio que uso actualmente es el siguiente: si la función necesita interactuar con la vista de alguna manera, ya sea recibiendo o enviando datos de esta, la función debe ir en el controlador. Si la función hace operaciones que afectan a los datos almacenados en nuestra base de datos entonces debe ir en el modelo.


Ya os escucho quejaros de que estas dos condiciones suelen darse a la vez en la práctica, entonces la respuesta es que la función debe ir implementada en los dos sitios. Un ejemplo muy claro de esto lo encontramos en el propio andamiaje (scaffolding) que añade a nuestros controladores funciones como “add”, “delete” o “edit”; todas ellas tienen su contrapartida en el modelo madre del que derivan todos los modelos en Cake, el modelo “model.php”.


Herencia en Cake

Para derivar una clase de otra en Cake, parece que no basta con la directiva “extends” al definir la clase, hay que añadir la línea «loadModule('ClasePadre');" antes de definir la clase, ahí va un ejemplo:


loadModel('Analysis');
class Analysis Ctt? extends Analysis {
...

Otra forma de hacer esto sería: require_once dirname(FILE). DS . 'analysis.php';


Artículos relacionados

An improvement to unbindModel on Model side

No hay archivos en esta página. [Enseñar archivos/formulario]
No hay comentarios en esta pagina. [Enseñar comentarios/formulario]