El siguiente fragmento de código SQL se parece mucho al que utilizamos en una publicación anterior, solamente que en este caso generamos  una lista de clases modelo con comentarios y propiedades predefinidas para ser usados con la librería Illuminate y Netbeans para habilitar Intellisense en los objetos del modelo para todas las columnas.

En algunas ejecuciones es necesario quitar las comillas dobles que se generan al rededor de cada clase.

USE information_schema;

SET @TARGET_DB = 'mibasededatos'; /*Reempalce esta variable con el nombre de la base de datos a analizar*/

SELECT 
CONCAT('/**\r\n * ',
            cols.TABLE_NAME,
            ': ',
            tbl.TABLE_COMMENT,
            '\r\n',
            REPLACE(GROUP_CONCAT(PROPERTY),', *',' *'), 
        ' */\r\n', 
        'class ' ,
        UCASE(LEFT(tbl.TABLE_NAME,1)), 
        SUBSTRING(tbl.TABLE_NAME,2), 
        ' extends \\Illuminate\\Database\\Eloquent\\Model { \r\npublic static $table=''' , 
        tbl.TABLE_NAME,
        '''; \r\npublic static $primary_key = ''',
        (
            SELECT GROUP_CONCAT(kcu.COLUMN_NAME) AS PK 
            FROM KEY_COLUMN_USAGE  kcu
            WHERE   kcu.TABLE_SCHEMA = @TARGET_DB 
                    AND kcu.CONSTRAINT_NAME='PRIMARY'
                    AND kcu.TABLE_NAME = cols.TABLE_NAME
        ),
        '''; \r\npublic static $timestamps = false;\r\n',
        '}'  
    ) AS class_def
FROM (
    SELECT  DISTINCT *, 
            CONCAT(' * @property ',DATA_TYPE,' $', COLUMN_NAME,' ',COLUMN_COMMENT,'\r\n') as PROPERTY 
    FROM COLUMNS WHERE TABLE_SCHEMA = @TARGET_DB
) cols
INNER JOIN TABLES tbl ON tbl.TABLE_NAME = cols.TABLE_NAME AND tbl.TABLE_SCHEMA = cols.TABLE_SCHEMA
GROUP BY cols.TABLE_NAME

 3,615 total views,  1 views today

27Shares
Última modificación: septiembre 6, 2018

Autor

Comentarios

Escribe una respuesta o comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.