-
Notifications
You must be signed in to change notification settings - Fork 1
Home
TBL-CLASS é uma ferramenta CLI para PHP que gera constantes type-safe diretamente a partir do schema do banco de dados.
O objetivo é eliminar magic strings ao trabalhar com SQL, tornando o código:
- mais seguro
- mais legível
- mais previsível
- resiliente a mudanças de schema
O TBL-CLASS é ideal para APIs, frameworks customizados, aplicações modernas em PHP e pipelines CI/CD.
-
Geração automática de constantes PHP a partir do schema
-
Constantes type-safe para:
- tabelas
- colunas
- foreign keys
- valores enum
-
Detecção de alterações no schema via hash
-
Compatível com MySQL, PostgreSQL e SQLite
-
Interface CLI simples e previsível
-
Integração nativa com Composer
-
Código gerado sem dependências externas
composer require erilshackle/php-tbl-class --devRecomendado como dependência de desenvolvimento.
php vendor/bin/tbl-classSe tblclass.yaml não existir, o comando:
- Cria um template limpo
- Informa o utilizador
- Interrompe a execução
Isto garante que a configuração — especialmente o naming strategy — seja definida conscientemente.
database:
driver: mysql
host: env(DB_HOST)
name: env(DB_NAME)
user: env(DB_USER)
password: env(DB_PASS)Também é possível usar um resolver de conexão customizado via database.connection.
php vendor/bin/tbl-classSerá gerado o ficheiro Tbl.php, contendo classes organizadas por responsabilidade.
php vendor/bin/tbl-class --checkNenhum ficheiro é sobrescrito. Apenas indica se o schema mudou desde a última geração.
final class Tbl
{
/** table: users */
public const users = 'users';
/** `users`.`id` */
public const users__id = 'id';
/** `users`.`email` */
public const users__email = 'email';
/** posts.user_id → users.id */
public const fk__posts__users = 'user_id';
public const enum__users__active = 'active';
public const enum__users__pending = 'pending';
public const enum__users__inactive = 'inactive';
}
final class Tbk
{
// reservado para PK, FK e UK (futuro)
}
final class Tbe
{
// reservado para enums (futuro)
}enabled: true
include: null
database:
connection: null
driver: mysql # mysql | pgsql | sqlite
host: env(DB_HOST)
port: env(DB_PORT)
name: env(DB_NAME)
user: env(DB_USER)
password: env(DB_PASS)
output:
path: "./"
namespace: ""
# ⚠ IMPORTANT
# This strategy defines ALL generated constant names.
# Changing it later WILL rename constants and MAY break code.
#
# Strategies:
# - full → users, users__email, fk__posts__users
# - abbr → users, usr__email, fk__posts__users
# - alias → users, u__email, fk__posts__users
# - upper → USERS, USERS__EMAIL, FK__POSTS__USERS
naming:
strategy: fullA naming strategy é global e afeta todas as constantes geradas:
- tabelas
- colunas
- foreign keys
- enums
Alterar a estratégia é uma breaking change e deve ser tratada como refactor.
Tbl::users
Tbl::users__id
Tbl::fk__posts__usersTbl::users
Tbl::usr__id
Tbl::fk__posts__usersTbl::users
Tbl::u__id
Tbl::fk__posts__usersTbl::USERS
Tbl::USERS__ID
Tbl::FK__POSTS__USERSCada geração inclui metadados no ficheiro:
/**
* @schema-hash md5:abc123...
* @generated 2026-01-08 18:42:00
*/Se o hash mudar, o schema foi alterado.
$sql = "
SELECT *
FROM " . Tbl::users . "
WHERE " . Tbl::users__id . " = ?
";
$status = Tbl::enum__users__active;
$fk = Tbl::fk__posts__users;MIT License — Eril TS Carvalho
TBL-CLASS Type-safe database schema constants for PHP.