{"id":34712197,"url":"https://github.com/erilshackle/php-tbl-class","last_synced_at":"2026-01-17T01:04:06.003Z","repository":{"id":329361648,"uuid":"1117829910","full_name":"erilshackle/php-tbl-class","owner":"erilshackle","description":"Generate PHP constants for database tables, columns, and foreign keys from your schema. Improves IDE autocomplete, reduces SQL typos, and enables safe refactoring.","archived":false,"fork":false,"pushed_at":"2026-01-08T22:42:20.000Z","size":205,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T12:37:59.166Z","etag":null,"topics":["auto-generation","ci-cd","cli","composer","constants","database","db-consistency-checker","db-constants","development-tools","generator","ide-autocomplete","mysql","orm-alternative","php","php-library","schema","sqlite","type-safety"],"latest_commit_sha":null,"homepage":"https://packagist.org/packages/eril/tbl-class","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/erilshackle.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-16T21:58:16.000Z","updated_at":"2026-01-08T22:20:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/erilshackle/php-tbl-class","commit_stats":null,"previous_names":["erilshackle/php-tbl-class"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/erilshackle/php-tbl-class","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Fphp-tbl-class","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Fphp-tbl-class/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Fphp-tbl-class/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Fphp-tbl-class/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/erilshackle","download_url":"https://codeload.github.com/erilshackle/php-tbl-class/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Fphp-tbl-class/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28490942,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T00:50:05.742Z","status":"ssl_error","status_checked_at":"2026-01-17T00:43:11.982Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-generation","ci-cd","cli","composer","constants","database","db-consistency-checker","db-constants","development-tools","generator","ide-autocomplete","mysql","orm-alternative","php","php-library","schema","sqlite","type-safety"],"created_at":"2025-12-25T00:47:25.261Z","updated_at":"2026-01-17T01:04:05.985Z","avatar_url":"https://github.com/erilshackle.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tbl::class\n\n### Type-safe database schema constants para PHP\n\n[![Latest Version](https://img.shields.io/packagist/v/eril/tbl-class)](https://packagist.org/packages/eril/tbl-class) [![PHP Version](https://img.shields.io/packagist/php-v/eril/tbl-class)](https://packagist.org/packages/eril/tbl-class) [![License](https://img.shields.io/packagist/l/eril/tbl-class)](https://packagist.org/packages/eril/tbl-class) [![Downloads](https://img.shields.io/packagist/dt/eril/tbl-class)](https://packagist.org/packages/eril/tbl-class) [![Stars](https://img.shields.io/github/stars/erilshackle/php-tbl-class?style=social)](https://github.com/erilshackle/php-tbl-class)\n\n---\n\n## O que é o tbl-class?\n\n**TBL-CLASS** é uma ferramenta **CLI para PHP** que gera **classes com constantes type-safe** directamente a partir do **esquema do seu banco de dados**.\n\nPermite referenciar **tabelas, colunas, foreign keys e valores enum** sem recorrer a strings mágicas, tornando o código:\n\n* mais seguro\n* mais legível\n* mais fácil de manter\n* resistente a alterações de schema\n\n\u003e Ideal para projectos PHP modernos, APIs, frameworks customizados e ambientes CI/CD.\n\n---\n\n## ✨ Funcionalidades Principais\n\n* Geração automática de constantes PHP a partir do schema\n* Constantes **type-safe e centralizadas**\n* Detecção de alterações no esquema via **hash**\n* Compatível com **MySQL, PostgreSQL e SQLite**\n* Classes organizadas: `Tbl`, `TblFk`, `TblEnum`\n* Interface CLI simples e previsível\n* Integração nativa com Composer\n\n---\n\n## 📌 Convenção Importante\n\n\u003e **Todas as constantes geradas são em lowercase**, por definição.\n\nExemplo:\n\n```php\nTbl::users\nTbl::users_id\nTblFk::posts_users\nTblEnum::users_status_active\n```\n\nIsto garante:\n\n* consistência entre bases de dados\n* compatibilidade cross-platform\n* previsibilidade em SQL dinâmico\n\n---\n\n## 📦 Instalação\n\n```bash\ncomposer require erilshackle/php-tbl-class --dev\n```\n\nRecomendado como dependência de desenvolvimento.\n\n---\n\n## 🚀 Utilização Rápida\n\n### 1. Criar configuração inicial\n\n```bash\nphp vendor/bin/tbl-class\n```\n\nGera o ficheiro `tblclass.yaml`.\n\n---\n\n### 2. Configurar ligação à base de dados\n\n```yaml\ndatabase:\n  driver: mysql\n  host: env(DB_HOST)\n  name: env(DB_NAME)\n  user: env(DB_USER)\n  password: env(DB_PASS)\n```\n\n---\n\n### 3. Gerar classes PHP\n\n```bash\nphp vendor/bin/tbl-class\n```\n\nÉ gerado o ficheiro `Tbl.php` contendo:\n\n* `Tbl` → tabelas, colunas e aliases\n* `TblFk` → foreign keys\n* `TblEnum` → valores enum\n\n---\n\n### 4. Verificar alterações no esquema\n\n```bash\nphp vendor/bin/tbl-class --check\n```\n\n---\n\n## 📁 Exemplo de Código Gerado\n\n```php\n\u003c?php\n\nfinal class Tbl\n{\n    /** table: users (alias: u) */\n    public const users = 'users';\n\n    /** `users`.`id` */\n    public const users_id = 'id';\n\n    /** `users`.`email` */\n    public const users_email = 'email';\n\n    // ==================== table aliases ====================\n    /** alias: `u` */\n    public const as_users = 'users u';\n}\n\nfinal class TblFk\n{\n    /** posts.user_id → users.id */\n    public const posts_users = 'user_id';\n}\n\nfinal class TblEnum\n{\n    public const users_status_active   = 'active';\n    public const users_status_pending  = 'pending';\n    public const users_status_inactive = 'inactive';\n}\n```\n\n---\n\n## 🔧 Configuração Completa (`tblclass.yaml`)\n\n```yaml\ninclude: null\n\ndatabase:\n  connection: null\n  driver: mysql # mysql | pgsql | sqlite\n\n  host: env(DB_HOST)\n  port: env(DB_PORT)\n  name: env(DB_NAME)\n  user: env(DB_USER)\n  password: env(DB_PASS)\n\n  # sqlite\n  # path: env(DB_PATH)\n\noutput:\n  path: \"./\"\n  namespace: \"\"\n\n  naming:\n    strategy: full # full | short | alias\n\n    abbreviation:\n      max_length: 15\n      dictionary_lang: en # en | pt | es | all\n      dictionary_path: null\n```\n\n---\n\n## 🧠 Estratégias de Nomenclatura\n\nNaming strategy is global and applied consistently to tables, columns, foreign keys and enums.\nChanging the strategy is a breaking change and should be treated as a refactor.\n\n### `full` (default)\n\n```php\nTbl::users\nTbl::users_id\nTblFk::users_posts\n```\n\n### `short` \n\n```php\nTbl::usr        // users\nTbl::usr_id     // users_id\nTblFk::usr_pst  // users_posts\n```\n\u003e\n\n### `alias`\n\n```php\nTbl::u          // users\nTbl::u_id       // users_id\nTblFk::u_p      // users_posts\n```\n\n---\n\n## 🔍 Detecção de Alterações de Schema\n\nCada geração inclui metadados:\n\n```php\n/**\n * @schema-hash md5:abc123...\n * @generated 2026-01-08 18:42:00\n */\n```\n\nSe o hash mudar, o schema foi alterado.\n\n---\n\n## 🏗️ Integração com Composer\n\n### Sem namespace\n\n```json\n{\n  \"autoload\": {\n    \"files\": [\"Tbl.php\"]\n  }\n}\n```\n\n### Com namespace\n\n```json\n{\n  \"autoload\": {\n    \"psr-4\": {\n      \"App\\\\Database\\\\\": \"src/Database/\"\n    }\n  }\n}\n```\n\n```bash\ncomposer dump-autoload\n```\n\n---\n\n## 📝 Exemplo de Utilização\n\n```php\n$sql = \"\n    SELECT *\n    FROM \" . Tbl::users . \"\n    WHERE \" . Tbl::users_id . \" = ?\n\";\n\n$status = TblEnum::users_status_active;\n$fk     = TblFk::posts_users;\n$alias  = Tbl::as_users;\n```\n\n---\n\n## 🐛 Resolução de Problemas\n\n**Nenhuma tabela encontrada**\n\n* Verifique a base de dados configurada\n* Confirme que existem tabelas\n\n**Erro de ligação**\n\n* Credenciais incorrectas no `tblclass.yaml`\n* Serviço da base de dados inactivo\n\n**Schema alterado**\n\n* Reexecutar `tbl-class`\n\n---\n\n## 📄 Licença\n\nMIT License — Eril TS Carvalho\n\n---\n\n## 🤝 Contribuições\n\nIssues e pull requests são bem-vindos.\nSugestões técnicas são apreciadas.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\u003cstrong\u003etbl::class — constantes type-safe para esquemas de base de dados em PHP.\u003c/strong\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferilshackle%2Fphp-tbl-class","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferilshackle%2Fphp-tbl-class","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferilshackle%2Fphp-tbl-class/lists"}