Difflock 1.0.0 es un paquete de Laravel creado por Rati Rukhadze y disponible en GitHub como `Heyosseus/difflock`. Requiere PHP 8.3 y es compatible con Laravel 12 y 13. También funciona con MySQL, MariaDB, PostgreSQL y SQLite.
php artisan difflock:lint
php artisan difflock:lint -v
php artisan difflock:lint --rule=drop-columnEl paquete analiza el código fuente de las migraciones sin cargarlo ni ejecutarlo. Después combina ese análisis con el esquema conectado y los metadatos sobre el tamaño de las tablas. Sus reglas cubren operaciones destructivas, cambios de columnas, índices, claves foráneas y nombres de columnas sensibles.
`difflock:lint` toma como entrada las migraciones pendientes. El ejemplo añade a `orders` una columna obligatoria `channel`, una clave `customer_id` con restricciones y `cascadeOnDelete()`, una columna nullable `card_number` de longitud 32 y un índice sobre `status`. También elimina `legacy_token` de `customers` y cambia el nombre de `name` a `full_name`.
Con una base de datos que ya contiene registros, Difflock señala la nueva columna obligatoria, `dropColumn()` y el cambio de nombre. También advierte que `cascadeOnDelete()` borra las filas hijas dentro de la base de datos. Los eventos de los modelos, los observers y los soft deletes no intervienen en ese proceso. La regla `change-column` compara `->change()` con la definición actual de la columna. `unindexed-foreign-key` comprueba el índice que necesita el motor de base de datos. `redundant-index` detecta casos como `(status)` cuando ya existe `(status, created_at)`.
La opción `-v` muestra más información y `--rule=` filtra una regla concreta. Cuando no quedan migraciones pendientes, el comando revisa todos los archivos de migración. Un proyecto existente puede aceptar su historial con `php artisan difflock:lint --all --accept`. El estado aceptado se guarda en `database/difflock/accepted.json`.
La detección de diferencias de esquema parte de una observación de la base de datos. Difflock no intenta reconstruir un esquema previsto a partir de los archivos de migración. Las condiciones, los bucles y el SQL sin formato de esos archivos no requieren interpretación. `php artisan difflock:diff --save` escribe `database/difflock/schema.json`, que se puede guardar en el repositorio. Más adelante, `php artisan difflock:diff` compara la conexión actual con ese archivo. `--from=staging --to=production` compara dos conexiones configuradas.
La referencia JSON incluye tablas, columnas, índices, valores predeterminados y claves foráneas. No incluye filas de las tablas ni credenciales. `snapshot.defaults`, `snapshot.comments` e `ignore.tables` permiten limitar los datos registrados. El artículo también menciona el linting de esquemas de Vacuum para PostgreSQL.
La instalación no modifica `php artisan migrate`. La protección se activa mediante `php artisan difflock:migrate`. El comando analiza las migraciones pendientes y se detiene antes de escribir en la base cuando los hallazgos alcanzan el nivel de bloqueo configurado. `--allow-risky` permite saltarse esa protección. El parámetro `--force` de Laravel sigue siendo la confirmación independiente para migraciones en producción.
En CI se puede ejecutar `php artisan difflock:check --ci`. El proceso devuelve 0 cuando la comprobación es correcta, 1 cuando hay diferencias de esquema o hallazgos que alcanzan el umbral, y 2 cuando no puede ejecutarse. Las reglas basadas solo en el código fuente funcionan sin conexión a la base. En ese caso, Difflock informa de que faltan los datos de las tablas.
`php artisan difflock:mcp` inicia un servidor MCP independiente mediante stdio. Sus cuatro herramientas ofrecen contexto de tablas, linting de migraciones, comprobaciones de diferencias de esquema y documentación de reglas. La herramienta de migraciones acepta una ruta de archivo o texto fuente. Un agente de programación con IA puede revisar una migración antes de crearla usando el esquema actual y las estadísticas de las tablas. `php artisan difflock:explain` genera un informe en Markdown sin usar un modelo de lenguaje ni una API externa.
La instalación se realiza con `composer require heyosseus/difflock --dev`. La configuración se publica mediante `php artisan vendor:publish --tag=difflock-config`. `php artisan difflock:doctor` informa sobre la conexión, las tablas disponibles, las migraciones pendientes, las reglas registradas y la capacidad de escritura del rol configurado. Para inspeccionar una conexión de producción resulta adecuada una cuenta de solo lectura.




Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.