3.7.1 Introducción
Los Modelos son usados en aplicaciones CakePHP para acceder a los datos. Los modelos comunmente representan tablas de la base de datos, aunque pueden ser también usados para acceder a archivos, regstros LDAP, eventos ical, o filas de un archivo CSV.
Los modelos pueden estar asociados a otros modelos para así facilitar el acceso a los datos de la aplicación. Si nos encontramos con que cada vez que iteramos sobre los datos de diferentes recetas desearíamos también obtener los datos relacionados (como el Autor de la receta), entonces las asociaciones entre modelos son ideales.
En CakePHP 1.2 se incorporaron los conceptos de DataSources (fuentes de datos) y Behaviors (comportamientos). Los DataSources forman una fuente fundamental (y unificada) para los modelos de CakePHP. Esto permite una mayor interacción entre modelos, incluyendo asociaciones. Los Behaviors proveen una forma de incorporar funcionalidad a nuestros modelos. Agregando behaviors a los modelos podemos acceder a formas comunes de manipulación de datos, como árboles, manejar cargas (upload), y más.
Un modelo completo en CakePHP puede parecer muy sencillo:
<?php
class Ingredient extends AppModel {
var $name = 'Ingredient';
}
?>
<?phpclass Ingredient extends AppModel {var $name = 'Ingredient';}?>
Nótese que los modelos en CakePHP heredan de una clase especial, AppModel: la clase madre de todo los modelos en nuestra aplicación. Como otras clases similares AppController y AppHelper, este es un lugar perfecto para escribir lógica compartida entre los modelos. El AppModel debe ser creado en /app/app_model.php, y debe a su vez descender de la clase Model.
Con unas cuantas líneas de código, obtenemos operaciones CRUD (conocidas como alta, baja y modificación) funcionando. La mayor parte de la implementación de esta funcionalidad proviene de la clase Model, de la cual AppModel desciende. Una vez que tenemos un modelo definido, podemos utilizarlo en nuestros controladores. Este es un ejemplo de como usar un modelo ($this->Ingredient) para iterar y manejar una lista archivos ingredientes.
<?php
class IngredientsController extends AppController {
function index() {
// Enviar la lista de ingredientes a la vista:
$this->set(
'ingredients',
$this->Ingredient->findAll()
);
}
}
?>
<?phpclass IngredientsController extends AppController {function index() {// Enviar la lista de ingredientes a la vista:$this->set('ingredients',$this->Ingredient->findAll());}}?>
Utilizar modelos para leer y modificar datos puede ahorrarnos varios dolores de cabeza. Los modelos en CakePHP ofrecen una forma centralizada y estándar de manipular nuestras fuentes de almacenamiento, al mismo tiempo que nos ofrecen un alto nivel de seguridad para nuestra aplicación.
Las clases que representan a los modelos pueden expandirse para incluir un importante número de atributos y métodos para así extender aún más su funcionalidad, lo cual se explicará más adelante.
