13. ActiveRecord en CakePHP y ORM

Son las siete de la tarde de un jueves 13 de noviembre de 2008, Google sólo tiene 1570 páginas con las palabras ActiveRecord y CakePHP, y yo salgo del armario. Sí, ¿qué pasa?. Hasta estos días no sabía exactamente qué era ActiveRecord, ni cómo lo implementaba CakePHP. ¿Y tú? Además, ¡resulta que CakePHP es un framework ORM! Esto es increíble y lo voy a apuntar en esta lista.

El origen del problema

Empecé creando estos modelos:

class Empresa extends AppModel{
   var $name = 'Empresa';
   var $validate = array(  'empresa'=>VALID_NOT_EMPTY,
                           'localidad'=>VALID_NOT_EMPTY,
                           'provincia'=>VALID_NOT_EMPTY,
                           'cp'=>VALID_NOT_EMPTY,
                           'telefono'=>VALID_NOT_EMPTY,
                           );
 

   var $belongsTo = array('Categoria'=>array('className'=>'Categoria'));

   var $hasMany = array('Notaprensa'=>array('className'=>'Notaprensa'));

   var $displayField = 'empresa';

} 
class Notaprensa extends AppModel{
   var $name = 'Notaprensa';
   var $validate = array('nota'=>VALID_NOT_EMPTY,);
   var $belongsTo = array('Empresa'=>array('className'=>'Empresa'));
}

Aquí se ve que la clase Empresa implementa una relación de tipo hasMany, y, Notaprensa, una de tipo belongsTo. Pues bien, yo quería obtener un listado de notas de prensa donde apareciera también el nombre de la empresa de cada nota.

Hacía poco había utilizado el ayudante HTML selectTag para rellenar la lista desplegable de una vista y mi tendencia instintiva -por así decirlo- fue razonar por analogía, sin darme cuenta. En otras palabras, si la lista desplegable de una vista se rellenaba con un ayudante HTML, ¿qué impedía utilizar otro para imprimir cualquier campo de un registro relacionado y no su identificador? Es decir, me pasó lo mismo que a Fran. Por cierto, también hay que decir que son varios los principiantes del Grupo Google CakePHP -en inglés- que encuentran algo confuso este ayudante HTML, como hacen aquí.

¿Y cómo es que es esto?

Estos enlaces me han servido para darme contexto y situarme; para saber un poco de qué va todo esto de la magia de CakePHP.

http://es.wikipedia.org/wiki/Mapeo_objeto-relacional

http://es.wikipedia.org/wiki/ActiveRecord

http://metodologiasdesistemas.blogspot.com/2007/10/que-es-un-orm-object-relational-mapping.html

http://www.mononeurona.org/pages/display/747

Resumen

ActiveRecord es el nombre de un patrón de diseño de software que consiste en envolver la tabla de una base de datos relacional en una clase. Este patrón propone una solución al problema de acceder a la base de datos y funciona de tal forma que la fila de una tabla se asocia a un objeto. El framework CakePHP, que se inspira en Ruby, implementa el patrón de diseño ActiveRecord a través de su clase Model; Ruby -que personalmente no conozco- lo hace mediante su clase ActiveRecord. Model y ActiveRecord son las clases de mapeo objeto-relacional de CakePHP y Ruby on Rails, respectivamente. Se puede decir que estas dos clases son equivalentes.

La clase Model de CakePHP implementa el método findAll(). Este método devuelve una matriz asociativa que contiene los registros que cumplen las condiciones que se le especifican. Gracias a la capa de abstracción que proporciona el patrón ActiveRecord -que implementa CakePHP a través de Model- la matriz asociativa que devuelve findAll() contiene registros relacionados, accesibles al programador.

Anuncios

2 comentarios

  1. […] por los behaviors) es con la explicación del manual oficial y reescribiendo el post anterior, 13. ActiveRecord en CakePHP y ORM. Me estoy preparando psicológicamente porque, por algunas impresiones que he podido recoger, las […]

  2. Gracias !!

    Me sirvio tu articulo ….

    Estaba buscando el como implementa el un ORM CakePHP.

    Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: