ActiveRecord

De KumbiaPHP Framework Wiki

Es la principal clase para la administración y funcionamiento de modelos. ActiveRecord es una implementación de este patrón de programación y esta muy influenciada por la funcionalidad de su análoga en Ruby disponible en Rails. ActiveRecord proporciona la capa objeto-relacional que sigue rigurosamente el estándar ORM: Tablas en Clases, Registros en Objetos, y Campos en Atributos. Facilita el entendimiento del código asociado a base de datos y encapsula la lógica especifica haciéndola más fácil de usar para el programador.

Ejemplo:

<?php
$Clientes->nit = “808111827-2”;
$Clientes->razon_social = “EMPRESA DE TELECOMUNICACIONES ETB”
$Clientes->save();
?>

Ventajas del ActiveRecord

  • Se trabajan las entidades del Modelo más Naturalmente como objetos.
  • Las acciones como Insertar, Consultar, Actualizar, Borrar, etc. de una entidad del Modelo están encapsuladas así que se reduce el código y se hace más fácil de mantener.
  • Código más fácil de Entender y Mantener
  • Reducción del uso del SQL en un 80%, con lo que se logra un alto porcentaje de independencia del motor de base de datos.
  • Menos “detalles” más practicidad y utilidad
  • ActiveRecord protege en un gran porcentaje de ataques de SQL inyection que puedan llegar a sufrir tus aplicaciones escapando caracteres que puedan facilitar estos ataques.

Crear un Modelo en Kumbia PHP Framework

Lo primero es crear un archivo en el directorio models con el mismo nombre de la relación en la base de datos. Por ejemplo: models/clientes.php Luego creamos una clase con el nombre de la tabla extendiendo alguna de las clases para modelos.

Ejemplo:

<?php
class Clientes extends ActiveRecord {
}
?>

Columnas y Atributos

Objetos ActiveRecord corresponden a registros en una tabla de una base de datos. Los objetos poseen atributos que corresponden a los campos en estas tablas. La clase ActiveRecord automáticamente obtiene la definición de los campos de las tablas y los convierte en atributos de la clase asociada. A esto es lo que nos referíamos con mapeo objeto relacional.

Miremos la tabla Album:

Ejemplo:

CREATE TABLE album (
id INTEGER NOT NULL AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
fecha DATE NOT NULL,
valor DECIMAL(12,2) NOT NULL,
artista_id INTEGER NOT NULL,
estado CHAR(1),
PRIMARY KEY(id)
)

Podemos crear un ActiveRecord que mapee esta tabla:

Ejemplo:

<?php
class Album extends ActiveRecord {
}
?>

Una instancia de esta clase será un objeto con los atributos de la tabla album:

Ejemplo:

$Album = new Album();
$Album->id = 2;
$Album->nombre = “Going Under”;
$Album->save();

Llaves Primarias y el uso de IDs

En los ejemplos mostrados de Kumbia siempre se trabaja una columna llamada id como llave primaria de nuestras tablas. Tal vez, esto no siempre es práctico a su parecer, de pronto al crear la tabla clientes la columna de numero de identificación sería una excelente elección, pero en caso de cambiar este valor por otro tendría problemas con el dato que este replicado en otras relaciones (ejemplo facturas), además de esto tendría que validar otras cosas relacionadas con su naturaleza. Kumbia propone el uso de ids como llaves primarias con esto se automatiza muchas tareas de consulta y proporciona una forma de referirse unívocamente a un registro en especial sin depender de la naturaleza de un atributo específico. Usuarios de Rails se sentirán familiarizados con esta característica.

Esta particularidad también permite a Kumbia entender el modelo entidad relación leyendo los nombres de los atributos de las tablas. Por ejemplo en la tabla álbum del ejemplo anterior la convención nos dice que id es la llave primaria de esta tabla pero además nos dice que hay una llave foránea a la tabla artista en su campo id.