Skip to content

Commit 11a3193

Browse files
authored
Update README.md
1 parent 22be17e commit 11a3193

1 file changed

Lines changed: 94 additions & 106 deletions

File tree

README.md

Lines changed: 94 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@
22

33
### Type-safe database schema constants para PHP
44

5-
[![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)
5+
[![Latest Version](https://img.shields.io/packagist/v/eril/tbl-class)](https://packagist.org/packages/eril/tbl-class)
6+
[![PHP Version](https://img.shields.io/packagist/php-v/eril/tbl-class)](https://packagist.org/packages/eril/tbl-class)
7+
[![License](https://img.shields.io/packagist/l/eril/tbl-class)](https://packagist.org/packages/eril/tbl-class)
8+
[![Downloads](https://img.shields.io/packagist/dt/eril/tbl-class)](https://packagist.org/packages/eril/tbl-class)
9+
[![Stars](https://img.shields.io/github/stars/erilshackle/tbl-class-php?style=social)](https://github.com/erilshackle/tbl-class-php)
610

711
---
812

913
## O que é o tbl-class?
1014

11-
**TBL-CLASS** é uma ferramenta **CLI para PHP** que gera **classes com constantes type-safe** directamente a partir do **esquema do seu banco de dados**.
15+
**TBL-CLASS** é uma ferramenta **CLI para PHP** que gera **classes com constantes type-safe** diretamente a partir do **esquema do seu banco de dados**.
1216

13-
Permite referenciar **tabelas, colunas, foreign keys e valores enum** sem recorrer a strings mágicas, tornando o código:
17+
Permite referenciar **tabelas, colunas, foreign keys, joins e valores enum** sem recorrer a strings mágicas, tornando o código:
1418

1519
* mais seguro
1620
* mais legível
@@ -27,7 +31,7 @@ Permite referenciar **tabelas, colunas, foreign keys e valores enum** sem recorr
2731
* Constantes **type-safe e centralizadas**
2832
* Detecção de alterações no esquema via **hash**
2933
* Compatível com **MySQL, PostgreSQL e SQLite**
30-
* Classes organizadas: `Tbl`, `TblFk`, `TblEnum`
34+
* Helpers de **JOIN baseados em foreign keys**
3135
* Interface CLI simples e previsível
3236
* Integração nativa com Composer
3337

@@ -41,9 +45,8 @@ Exemplo:
4145

4246
```php
4347
Tbl::users
44-
Tbl::users_id
45-
TblFk::posts_users
46-
TblEnum::users_status_active
48+
Tbl::users__id
49+
Tbl::on__posts__users
4750
```
4851

4952
Isto garante:
@@ -86,6 +89,11 @@ database:
8689
user: env(DB_USER)
8790
password: env(DB_PASS)
8891
```
92+
ou usando callback
93+
```yaml
94+
database:
95+
connection: "class::method"
96+
```
8997
9098
---
9199
@@ -97,9 +105,8 @@ php vendor/bin/tbl-class
97105

98106
É gerado o ficheiro `Tbl.php` contendo:
99107

100-
* `Tbl` → tabelas, colunas e aliases
101-
* `TblFk` → foreign keys
102-
* `TblEnum` → valores enum
108+
* `Tbl` → tabelas, colunas e JOIN helpers
109+
* enums e metadata de schema
103110

104111
---
105112

@@ -111,112 +118,113 @@ php vendor/bin/tbl-class --check
111118

112119
---
113120

114-
## 📁 Exemplo de Código Gerado
121+
## 🔗 JOIN Helpers (v1.1.0)
122+
123+
A partir da **v1.1.0**, o `tbl-class` gera automaticamente **helpers de JOIN** com base nas **foreign keys reais do schema**.
124+
125+
### Constantes geradas
126+
127+
Para uma foreign key:
128+
129+
```
130+
posts.user_id → users.id
131+
```
132+
133+
é gerada a constante:
115134

116135
```php
117-
<?php
136+
public const on__posts__users = 'posts.user_id = users.id';
137+
```
118138

119-
final class Tbl
120-
{
121-
/** table: users (alias: u) */
122-
public const users = 'users';
139+
---
123140

124-
/** `users`.`id` */
125-
public const users__id = 'id';
141+
### Uso direto
126142

127-
/** `users`.`email` */
128-
public const users__email = 'email';
143+
```php
144+
Tbl::on__posts__users();
145+
// posts.user_id = users.id
146+
```
129147

130-
/** posts.user_id → users.id */
131-
public const fk__posts__users = 'user_id';
132-
133-
public const enum__users__active = 'active';
134-
public const enum__users__pending = 'pending';
135-
public const enum__users__inactive = 'inactive';
136-
}
148+
---
137149

138-
final class Tbk
139-
{
140-
// futuramente dedicado aos PK, FK e UK
141-
}
150+
### Uso com aliases (via __callStatic)
142151

143-
final class Tbe
144-
{
145-
// futuramente - dedicado aos enums
146-
}
152+
```php
153+
Tbl::on__posts__users('p', 'u');
154+
// p.user_id = u.id
147155
```
148156

149157
---
150158

151-
## 🔧 Configuração Completa (`tblclass.yaml`)
159+
### Helper de alias de tabela
152160

153-
```yaml
154-
include: null
161+
```php
162+
Tbl::users('u');
163+
// users AS u
164+
```
155165

156-
database:
157-
connection: null
158-
driver: mysql # mysql | pgsql | sqlite
166+
---
159167

160-
host: env(DB_HOST)
161-
port: env(DB_PORT)
162-
name: env(DB_NAME)
163-
user: env(DB_USER)
164-
password: env(DB_PASS)
168+
### Exemplo completo de SQL
165169

166-
# sqlite
167-
# path: env(DB_PATH)
170+
```php
171+
$sql = "
172+
SELECT *
173+
FROM " . Tbl::users('u') . "
174+
JOIN " . Tbl::posts('p') . "
175+
ON " . Tbl::on__posts__users('p', 'u') . "
176+
WHERE u.status = ?
177+
";
178+
```
168179

169-
output:
170-
path: "./"
171-
namespace: ""
180+
---
172181

173-
naming:
174-
strategy: full # full | short | alias
182+
## 📁 Exemplo de Código Gerado
175183

176-
abbreviation:
177-
max_length: 15
178-
dictionary_lang: en # en | pt | es | all
179-
dictionary_path: null
184+
```php
185+
final class Tbl
186+
{
187+
/** TABLE: users */
188+
public const users = 'users';
189+
190+
/** COLUMN: users.id */
191+
public const users__id = 'id';
192+
193+
/** JOIN: posts.user_id = users.id */
194+
public const on__posts__users = 'posts.user_id = users.id';
195+
196+
}
180197
```
181198

182199
---
183200

184201
## 🧠 Estratégias de Nomenclatura
185202

186-
Naming strategy is global and applied consistently to tables, columns, foreign keys and enums.
187-
Changing the strategy is a breaking change and should be treated as a refactor.
203+
Naming strategy é global e aplicada consistentemente a tabelas, colunas, joins e enums.
204+
Alterar a estratégia é um **breaking change** e deve ser tratado como refactor.
188205

189206
### `full` (default)
190207

191208
```php
192209
Tbl::users
193210
Tbl::users__id
194-
Tbl::fk__users__posts
211+
Tbl::on__posts__users
195212
```
196213

197-
### `short`
214+
### `short`
198215

199216
```php
200-
Tbl::users
217+
Tbl::usr
201218
Tbl::usr__id
202-
Tbl::fk__users__posts
203-
```
204-
205-
### `abbr`
206-
207-
```php
208-
Tbl::users // users
209-
Tbl::usr__id // users_id
210-
Tbl::fk__usr_pst // users_posts
219+
Tbl::on__pst__usr
211220
```
212-
>
213221

214-
### `alias`
222+
### `abbr`
215223

216224
```php
217-
Tbl::users // users
218-
Tbl::u__id // users_id
219-
Tbl::fk__u__p // users_posts
225+
Tbl::u
226+
Tbl::u__id
227+
Tbl::on__p__u
220228
```
221229

222230
---
@@ -228,7 +236,7 @@ Cada geração inclui metadados:
228236
```php
229237
/**
230238
* @schema-hash md5:abc123...
231-
* @generated 2026-01-08 18:42:00
239+
* @generated 2026-01-25 21:10:00
232240
*/
233241
```
234242

@@ -243,7 +251,7 @@ Se o hash mudar, o schema foi alterado.
243251
```json
244252
{
245253
"autoload": {
246-
"files": ["Tbl.php"]
254+
"files": ["path/to/Tbl.php"]
247255
}
248256
}
249257
```
@@ -254,7 +262,7 @@ Se o hash mudar, o schema foi alterado.
254262
{
255263
"autoload": {
256264
"psr-4": {
257-
"App\\Database\\": "src/Database/"
265+
"Tbl\\": "path/to/Tbl/"
258266
}
259267
}
260268
}
@@ -266,37 +274,17 @@ composer dump-autoload
266274

267275
---
268276

269-
## 📝 Exemplo de Utilização
270-
271-
```php
272-
$sql = "
273-
SELECT *
274-
FROM " . Tbl::users . "
275-
WHERE " . Tbl::users_id . " = ?
276-
";
277-
278-
$status = Tbl::enum__users__active;
279-
$fk = Tbl::fk__posts__users;
280-
$alias = Tbl::as__users;
281-
```
282-
283-
---
284-
285277
## 🐛 Resolução de Problemas
286278

287-
**Nenhuma tabela encontrada**
288-
289-
* Verifique a base de dados configurada
290-
* Confirme que existem tabelas
279+
**JOIN não gerado**
291280

292-
**Erro de ligação**
281+
* Verifique se existe foreign key real no schema
282+
* Reexecute o gerador após alterações
293283

294-
* Credenciais incorrectas no `tblclass.yaml`
295-
* Serviço da base de dados inactivo
296-
297-
**Schema alterado**
284+
**Nenhuma tabela encontrada**
298285

299-
* Reexecutar `tbl-class`
286+
* Confirme a base de dados configurada
287+
* Verifique permissões
300288

301289
---
302290

@@ -309,7 +297,7 @@ MIT License — Eril TS Carvalho
309297
## 🤝 Contribuições
310298

311299
Issues e pull requests são bem-vindos.
312-
Sugestões técnicas são apreciadas.
300+
Discussões técnicas são incentivadas.
313301

314302
---
315303

0 commit comments

Comments
 (0)