ORM PHP factory

  • Autor Autor diegoofernandez
  • Fecha de inicio Fecha de inicio
diegoofernandez

diegoofernandez

Beta
Redactor
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas gente, al fin me anime a crear un tema en el foro, les dejo un proyectito php que hice y que iré mejorando con el tiempo.

Creador de ORM para PHP. Independiente y sin necesidad de instalación

Bienvenido. Objetivo y descripción

OrmFactory se encarga de crear la base de datos, tablas de la misma y todo el código php que mapea las tablas brindando un modelo orientado a objetos; agregando de esta manera una capa de abstracción para conectarte a la base de datos y ahorrándote cientos de líneas de código.
Veamos de manera ilustrativa lo que hace ormfactory:

imagen-orm-2.webp

Todo esto lo logra leyendo el archivo 'config_db.json'. Para tener una idea más 'gráfica' de lo que logra veamos el valor 'tables' del config_db.json:


imagen-orm-1.webp

El archivo config_db.json

imagen-orm-3.webp

Tú lo único que tienes que configurar es el archivo json de configuración, el mismo contendrá los datos de acceso al servidor, el nombre de la base de datos a crear y el string especial que ormfactory leerá para crear la base de datos, las tablas y las clases ORM php.

Directorio que genera el ormfactory

Este directorio se generará luego de ejecutado el ormfactory, y siempre se llamara 'Entitys'. Este directorio podremos moverlo/copiarlo directamente a nuestro proyecto sin ningún tipo de problema. Supongamos que creamos una base de datos en las cual hay 2 tablas llamadas 'utiles' y 'ventas':

imagen-orm-4.webp

Ejecución de ormfactory

Primero hay que descargar la carpeta 'ormfactory' y guardarla en nuestro localhost o server. Correr el script que nos generará todo lo nombrado anteriormente es tan simple como ir a nuestro navegador y escribir lo siguiente:

localhost/ormfactory/creator-update/InitORM.php

Por supuesto deberá cambiar si es necesario la dirección 'localhost' por la que se encuentre en su maquina o server.

Template entidad generada:
Entidad generada por ormfactory · GitHub

Load de clases generado: Cargador de clases generado por ormfactory · GitHub

Crear el string para generar tablas

Veamos primero como se compone un string sql para que ormfactory lo sepa leer:

HTML:
utiles$id-int-auto-auto_increment$tipo-varchar-220$precio-int-25$fecha_creacion-varchar-50$primary_key-id

Rápidamente notamos los varios usos del signo dolar ($). Este símbolo lo que hace en el string es indicar que termina una acción.

Escribir nombre de tabla:

Lo primero que encontramos antes de escribir el signo dolar ($) es el nombre de la tabla:

HTML:
utiles$

Lo primero que tenemos que escribir es el nombre de la tabla y agregarle el signo dolar($), ya que el ormfactory detectara que esa parte del string contiene 1 solo elemento y por lo tanto interpretará que es el nombre de la tabla.

Escribir un campo en la tabla:
HTML:
id-int-auto-auto_increment$

El carácter que lee ormfactory para 'partir' el string y crear el campo con las propiedades indicadas es el signo medio '-'. Sabiendo esto, podemos interpretar el string escrito arriba como lo siguiente:

1. Tenemos que crear un campo que se llame 'id'.
2. El campo va a ser de tipo entero (int).
3. La longitud del campo va a ser automática.
4. El campo va a ser auto_increment.
5. Terminamos la acción con el signo dolar($).

Y así sucesivamente con todos los campos que queramos crear en la tabla. AHORA hay unas reglas claves para que ormfactory entienda el string y son las siguientes:

1. NO puede haber espacios en blanco.
2. Cada campo recibe como mínimo tres valores: nombre, tipo, longitud. Ej: apellidos-varchar-220
3. Cada vez que queramos terminar un campo debemos agregar el signo dolar($) y a continuación seguir escribiendo el siguiente campo.

Constantes: auto_increment, primary_key y foreign_key:
Si queremos indicar que un campo es auto incrementa-ble, lo tenemos que indicar como cuarto y último parámetro en la posición del campo:

HTML:
id-int-auto-auto_increment$

Indicar que un campo va a ser la clave primaria (primary_key) de la tabla:

HTML:
primary_key-id

Al final de la tabla (más abajo se explica como cerrar y comenzar una nueva tabla) tenemos que indicar la constante primary_key y luego el nombre del campo que será la clave primaria:

Crear claves foráneas para nuestras tablas mediante el string sql:

HTML:
foreign_key-articulo_vendido-utiles-id

En la última acción de la tabla indicamos al constante foreign_key, luego indicamos el nombre del campo que almacenará los valores foráneos; como tercer parámetro de la acción hacemos referencia a el nombre de la tabla desde donde traeremos los datos y por último el campo de esa tabla desde donde tomaremos los valores.

Escribir varias tablas en el string:
El carácter para cerrar una tabla y comenzar otra es la barra vertical ( | ), ejemplo:

HTML:
nameTable$campo-tipo-255$campo-tipo-255|nameTable2$campo2-tipo2-255

Hay que tener cuidado con este carácter, solo debemos indicarlo si vamos a seguir escribiendo más tablas, si no, no es necesario. En el ejemplo vemos que al terminar la segunda tabla no indicamos la barra vertical.

Pasos para usar ormfactory

1. Descargar el proyecto.
2. Colocar la carpeta general 'ormfactory' dentro de localhost o servidor.
3. Indicar en 'config_db.json' los valores de: conexión y creación de base de datos, creación de tablas.
4. Ir al navegador e indicar la siguiente ruta: localhost/ormfactory/creator-update/InitORM.php
5. Copiar la carpeta generada 'Entitys' y moverla al directorio de nuestro proyecto.
6. Para hacer uso de cada entidad simplemente tenemos que llamar al script 'load.php' de la siguiente manera: require_once 'Entitys/requeriments/load.php';
7. *Recordar que a los setters y getters se los accede de la siguiente manera: getNombreCampo() y setNombreCampo()

Funciones extras en cada entidad:

PHP:
getAll()

Nos devolverá todos los datos de la entidad instanciada.

PHP:
deleteAll()

CUIDADO: eliminará la fila completa de la tabla.

Crear nuevo objeto con la entidad:

PHP:
$objDemo = new MyEntity("data1", "data2", etc.);

Instanciar la entidad con un dato ya existente en la base de datos:

PHP:
$objDemo = new MyEntity();
$objDemo->recoveryAll($data);

El parámetro que recibe la función 'recoveryAll' es el id de la fila que queramos recuperar.

Última consideración importante:
Todas las tablas deben llevar el campo 'id' y el mismo debe llamarse por supuesto 'id'. No es necesario que el mismo sea auto incrementa-ble.

Espero se haya entendido, cualquier duda a los comentarios. Saludos!
 

Adjuntos

Por que no lo mandas a github?
 
Si lo subieras a github tuvieras mas sugerencias y mucha gente podrá conocer tu proyecto :ghost:
 
Si, ahí lo estoy subiendo... gracias por la sugerencia 🙂
 
Si, ahí lo estoy subiendo... gracias por la sugerencia 🙂

Muchas Gracias Por Compartirlo.

Una Pregunta no Serviria esto para sincronizar base de datos? :encouragement:

Ejemplo que el sitio web principal genere ese archivo y los sitio web copia que esta en otros servidores lean el contenido de ese archivo json? lo malo que de igual forma los demas servidores pondria lento la web principal haciendo la consulta a ese archivo.

Por eso estaba pensado tener una base de datos para cada copia del script solo que esa base de datos actualizado con los datos mas actuales.

Ya que si por ejemplo Tienes un Proyecto de Archivos

Puedes tener el Servidor Principal Solo Para la web y Subir los Archivos En los demas Servidores y una copia del Script, asi en caso que el servidor 1 este lento haga Balanceo de Carga Para mandar a la gente al Servidor 2, al tener una copia de la web en el servidor 2 y con la base de datos mas actual no habria problema en seguir llamado dicho archivo.

No se si me explique bien.
 
Última edición:
Si, podría servir perfectamente.. mientras que cuando se genere de manera dinámica el json mantenga la estructura.. funcionaría bien. Todo suponiendo que lo que necesitas es crear la base de datos, tablas y entidades php desde "cero". Por que aún no tiene la opción de actualización/generación de entidades leyendo una base de datos ya existente que no se haya creado en la ejecución del script.
 
Felicitaciones colega ! Estas desarrollando tu propio LARAVEL ?🙂
 
Felicitaciones colega ! Estas desarrollando tu propio LARAVEL ?🙂

Hola, gracias por tu comentario... La idea es algo parecida, lo que intento hacer con esta pequeña herramienta es "imitar" por así decirlo, imitar poco a poco con mejoras la lógica y el funcionamiento del modelo de datos de frameworks como laravel, pero intentar lograrlo sin tener que instalar un framework como tal, osea que las entidades y el código generado sea independiente y se pueda "mover" sin tener que instalar dependencias extras para que corra.. más o menos esa es la idea.. je 🙂
 
Atrás
Arriba