PlatesPHP: Sistema de plantillas para Codeigniter 3
PlatesPHP: Sistema de plantillas para Codeigniter 3

Un ORM nos ayuda a trabajar nuestra base de datos como si de objetos se tratase, esta seria una explicación, pero mejor la que nos ofrece la wikipedia, que es fantástica.

El mapeo objeto-relacional (más conocido por su nombre en inglés, Object-Relational mapping, o sus siglas O/RM, ORM, y O/R mapping) es una técnica de programación para convertir datos entre el sistema de tipos utilizado en un lenguaje de programación orientado a objetos y el utilizado en una base de datos relacional, utilizando un motor de persistencia. En la práctica esto crea una base de datos orientada a objetos virtual, sobre la base de datos relacional. Esto posibilita el uso de las características propias de la orientación a objetos (básicamente herencia y polimorfismo).

Dicho ésto, nosotros vamos a crear un ejemplo bastante didáctico haciendo uso de Datamapper, haremos uso de todos los tipos posibles de relación, de uno a uno, de uno a muchos y de muchos a muchos, haciendo uso en este último caso de una tabla pivote, necesaria para este tipo de relaciones.

La versión de Datamapper que vamos a utilizar es la 1.8.2, que es la última en producción y funciona correctamente con las versiones de codeigniter 1.7.2 en adelante.

Datamapper, un ORM para codeigniter

Nos vamos a la web de codeIgniter y nos descargamos la versión que hay disponible, la guardamos y la extraemos en nuestro directorio raíz, en mi caso C:\xampp\htdocs, una vez tengamos ya la carpeta con los archivos debemos cambiarle el nombre, le podemos poner orm_ci, sugiero que coloquen el mismo así será más sencillo seguir el tutorial.

Lo siguiente es descargar el ORM desde el siguiente enlace.

Descargar datamapper.

Ahora debemos añadir los archivos a nuestro proyecto para lograr que funcione.

Abrimos el rar de datamapper que acabamos de descargar y colocamos el archivo que hay en config llamado datamapper.php dentro de la carpeta config de nuestro proyecto.

El archivo que hay en libraries/datamapper.php lo movemos a la carpeta libraries de nuestro proyecto.

Si abrimos la carpeta third_party veremos que hay una carpeta llamada datamapper, esta carpeta completa la debemos mover a la carpeta third_party de nuestro proyecto.

Finalmente, las carpetas que hay dentro de language las colocamos dentro de la carpeta language de nuestro proyecto.

Ahora debemos abrir el archivo index.php de la raíz de nuestro proyecto, y antes de:

Debemos añadir lo siguiente:

Debemos añadir al autoload la carga tanto de la base de datos como de datamapper como sigue.

Con ésto ya tenemos todos los archivos necesarios, ahora debemos crear la base de datos y las tablas.

La base de datos

Y las tablas.

Relaciones y tablas

Como hemos podidos ver, tendremos las siguientes tablas con sus relaciones:

  • cursos: relación muchos a muchos con users, la tabla pivote será cursos_users.
  • cursos_users: tabla pivote que sirve para controlar la relación entre usuarios y cursos.
  • dnis: relación de uno a uno con users.
  • estados: relación de uno a muchos entre users y estados, un usuario un estado, un estado muchos usuarios.
  • users: un usuario puede tener un estado, un dni y muchos cursos.

La relación entre users y estados la podríamos haber conectado a partir de una tercera tabla, en lugar de colocar una clave foránea en la tabla users llamada estado_id, es importante tenerlo en cuenta ya que es una posibilidad que nos ofrece este potente ORM.

Si nos fijamos, nuestras tablas se llaman users, estados, dnis etc, todas en plural, ésto es bastante normal, pero al crear modelos con datamapper veremos como nos referimos a cada una de ellas en su forma singular, realmente no hacemos referencia a la tabla, sino al modelo. Tener cuidado si por ejemplo, el nombre de vuestra tabla en singular acaba por s, como es el caso de país, ya que se ve que hay problemas con la pluralización y las relaciones no funcionarían de forma correcta, es simplemente un detalle a tener en cuenta.

El .htaccess

Creamos un archivo llamado .htaccess en la raíz de la aplicación para evitar el dichoso index.php y dentro colocamos el siguiente código.

Ahora ya tenemos todo listo y podemos empezar a crear modelos, ver como realizar las validaciones y crear las relaciones entre ellos.

El modelo users

Creamos un nuevo archivo en application/models llamado user.php y dentro colocamos el siguiente código.

El modelo estado

Creamos un nuevo archivo en application/models llamado estado.php y dentro colocamos el siguiente código.

El modelo dni

Creamos un nuevo archivo en application/models llamado dni.php y dentro colocamos el siguiente código.

El modelo curso

Creamos un nuevo archivo en application/models llamado curso.php y dentro colocamos el siguiente código.

Hasta aquí ya tenemos creados todos los modelos que necesitamos para poder obtener y eliminar datos, que es de lo que se trata, como vemos tenemos el array $validation, que se encarga de hacer las validaciones para los campos de la tabla que maneja el modelo, si necesitas más información puedes pasar por la documentación.

La propiedad $table que nos permite decirle al modelo el nombre de la tabla, así podemos tener más libertad a la hora de crear nuestros modelos, piénsalo.

Finalmente tenemos la forma en la que le decimos a datamapper el tipo de relaciones a través de $has_one y $has_many, los cuáles admiten un array con el nombre de los otros modelos, más información aquí.

Ahora, sin pensarlo demasiado, vamos a crear directamente un controlador llamado test.php, que mejor para hacer tests, y dentro colocamos el siguiente código, aquí veremos como insertar, obtener, mostrar errores del modelo y obtener todos los datos relacionados de un usuario, por ejemplo.

Como dato importante, decir que no hace falta cargar los modelos de forma manual, ya que datamapper lo hace automáticamente, y eso es todo, ya tenemos algo para seguir conociendo este fantástico ORM.

En los próximos tutoriales sobre datamapper intentáremos crear un login y un registro de usuarios haciendo uso de él.

Si te ha sido útil el post puedes utilizar los botones de las redes sociales para ayudarme con mi trabajo :D.

Descargar proyecto