El patrón active record en PHP

El patrón active record en PHP

El patrón active record, conocido sobre todo por su uso en ruby on rails es un patrón de diseño que define una forma de acceder a los datos de una base de datos relacional y convertir las filas de una tabla en objetos.

Cuando se modifican los datos de un objeto se actualiza la fila correspondiente en la BBDD, cuando se crea un objeto se añade una fila y cuando se borra el objecto también se borra de la BBDD.

Para php nos encontramos con una implementación open source muy similar a cómo podemos trabajar en ruby on rails, la podemos encontrar en www.phpactiverecord.org

Su objetivo es simplificar enormemente la interacción con la base de datos y eliminar la tarea de escribir SQL a mano para operaciones comunes. A diferencia de otros ORM, no es necesario utilizar generadores de código ni mantener archivos de configuración para las tablas. Está basado en convenciones en lugar de configuraciones.

Un sencillo ejemplo de uso:

class Car extends ActiveRecordModel {

	static $belongs_to = array(
		array('driver'),
		array('trademark')
	);

}

Según las convenciones que se siguen, la clase Car se relaciona con la tabla cars (la clase en singular y la tabla en plural), esto se hace automáticamente y no es necesario configurar nada. En la propiedad de clase $belongs_to le indicamos que un coche tiene un conductor (clase Driver y tabla drivers) y una marca (clase Trademark y tabla trademarks). Las tablas tienen que tener un campo id (que será la clave primaria) y también es conveniente que tengan los campos create_at y updated_at, que son las fechas de creación y modificación respectivamente y que se actualizan automaticamente en los inserts y los updates.

Automáticamente también tenemos métodos sin tener que definir nada:

	$cars = Car::all(); // nos devuelve un array de objetos con todos los coches de la BBDD.
	$car = Car::find(1); // nos devuelve el coche con id=1
	$driver_name = $car->driver->name; // nos devuelve el nombre del conductor del coche anterior
	$car->price = 10000; // actualizamos el precio del coche.
	$car->save(); // Hacemos los cambios persistentes.
	$car->delete(); // Borramos el coche anterior.
	$cheapest_cars = Car::all(array('conditions' => 'price < 10000')); // Buscamos los coches con un precio menor a 10000.

Como vemos en este ejemplo es muy sencillo trabajar con ActiveRecord. También podemos hacer validaciones y muchas otras cosas, de forma muy sencilla.

Para utilizar esta implementación es necesario disponer de la versión de PHP 5.3 como mínimo. Utiliza namespaces por lo que es sencillo integrarla en tu aplicación.

Hay muchos frameworks para PHP que tienen sus propias implementaciones del patrón ActiveRecord o variaciones del mismo como Symfony, CodeIgniter, FuelPHP, ... aunque esta implementación quizás sea la más fiel al patrón y más similar a ruby on rails que hemos visto.

Comentarios

Sin comentarios
Ha habido un error en el envío
Comentario enviado. Será revisado por la moderación antes de ser publicado.

Deja tu comentario

Tu nombre:
Tu email:
Tu comentario: