{"id":39929171,"url":"https://github.com/erilshackle/tbl-class-php","last_synced_at":"2026-01-25T17:01:04.241Z","repository":{"id":333298947,"uuid":"1136651536","full_name":"erilshackle/tbl-class-php","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-18T17:29:40.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T21:00:14.163Z","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":"","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":"2026-01-18T04:39:48.000Z","updated_at":"2026-01-18T17:29:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/erilshackle/tbl-class-php","commit_stats":null,"previous_names":["erilshackle/tbl-class-php"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/erilshackle/tbl-class-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Ftbl-class-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Ftbl-class-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Ftbl-class-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Ftbl-class-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/erilshackle","download_url":"https://codeload.github.com/erilshackle/tbl-class-php/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erilshackle%2Ftbl-class-php/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28755561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T16:32:25.380Z","status":"ssl_error","status_checked_at":"2026-01-25T16:32:09.189Z","response_time":113,"last_error":"SSL_read: 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":"2026-01-18T18:05:11.705Z","updated_at":"2026-01-25T17:01:04.180Z","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/tbl-class-php?style=social)](https://github.com/erilshackle/tbl-class-php)\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/tbl-class-php --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    /** posts.user_id → users.id */\n    public const fk__posts__users = 'user_id';\n  \n    public const enum__users__active   = 'active';\n    public const enum__users__pending  = 'pending';\n    public const enum__users__inactive = 'inactive';\n}\n\nfinal class Tbk\n{\n  // futuramente dedicado aos PK, FK e UK\n}\n\nfinal class Tbe\n{\n  // futuramente - dedicado aos enums\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\nTbl::fk__users__posts\n```\n\n### `short` \n\n```php\nTbl::users\nTbl::usr__id\nTbl::fk__users__posts\n```\n\n### `abbr` \n\n```php\nTbl::users        // users\nTbl::usr__id     // users_id\nTbl::fk__usr_pst  // users_posts\n```\n\u003e\n\n### `alias`\n\n```php\nTbl::users          // users\nTbl::u__id       // users_id\nTbl::fk__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 = Tbl::enum__users__active;\n$fk     = Tbl::fk__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%2Ftbl-class-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferilshackle%2Ftbl-class-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferilshackle%2Ftbl-class-php/lists"}