TBL-CLASS é uma ferramenta CLI para PHP que gera classes com constantes type-safe directamente a partir do esquema do seu banco de dados.
Permite referenciar tabelas, colunas, foreign keys e valores enum sem recorrer a strings mágicas, tornando o código:
- mais seguro
- mais legível
- mais fácil de manter
- resistente a alterações de schema
Ideal para projectos PHP modernos, APIs, frameworks customizados e ambientes CI/CD.
- Geração automática de constantes PHP a partir do schema
- Constantes type-safe e centralizadas
- Detecção de alterações no esquema via hash
- Compatível com MySQL, PostgreSQL e SQLite
- Classes organizadas:
Tbl,TblFk,TblEnum - Interface CLI simples e previsível
- Integração nativa com Composer
Todas as constantes geradas são em lowercase, por definição.
Exemplo:
Tbl::users
Tbl::users_id
TblFk::posts_users
TblEnum::users_status_activeIsto garante:
- consistência entre bases de dados
- compatibilidade cross-platform
- previsibilidade em SQL dinâmico
composer require erilshackle/tbl-class-php --devRecomendado como dependência de desenvolvimento.
php vendor/bin/tbl-classGera o ficheiro tblclass.yaml.
database:
driver: mysql
host: env(DB_HOST)
name: env(DB_NAME)
user: env(DB_USER)
password: env(DB_PASS)php vendor/bin/tbl-classÉ gerado o ficheiro Tbl.php contendo:
Tbl→ tabelas, colunas e aliasesTblFk→ foreign keysTblEnum→ valores enum
php vendor/bin/tbl-class --check<?php
final class Tbl
{
/** table: users (alias: u) */
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
{
// futuramente dedicado aos PK, FK e UK
}
final class Tbe
{
// futuramente - dedicado aos enums
}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)
# sqlite
# path: env(DB_PATH)
output:
path: "./"
namespace: ""
naming:
strategy: full # full | short | alias
abbreviation:
max_length: 15
dictionary_lang: en # en | pt | es | all
dictionary_path: nullNaming strategy is global and applied consistently to tables, columns, foreign keys and enums. Changing the strategy is a breaking change and should be treated as a refactor.
Tbl::users
Tbl::users__id
Tbl::fk__users__postsTbl::users
Tbl::usr__id
Tbl::fk__users__postsTbl::users // users
Tbl::usr__id // users_id
Tbl::fk__usr_pst // users_postsTbl::users // users
Tbl::u__id // users_id
Tbl::fk__u__p // users_postsCada geração inclui metadados:
/**
* @schema-hash md5:abc123...
* @generated 2026-01-08 18:42:00
*/Se o hash mudar, o schema foi alterado.
{
"autoload": {
"files": ["Tbl.php"]
}
}{
"autoload": {
"psr-4": {
"App\\Database\\": "src/Database/"
}
}
}composer dump-autoload$sql = "
SELECT *
FROM " . Tbl::users . "
WHERE " . Tbl::users_id . " = ?
";
$status = Tbl::enum__users__active;
$fk = Tbl::fk__posts__users;
$alias = Tbl::as__users;Nenhuma tabela encontrada
- Verifique a base de dados configurada
- Confirme que existem tabelas
Erro de ligação
- Credenciais incorrectas no
tblclass.yaml - Serviço da base de dados inactivo
Schema alterado
- Reexecutar
tbl-class
MIT License — Eril TS Carvalho
Issues e pull requests são bem-vindos. Sugestões técnicas são apreciadas.