gui1535 / sql-to-eloquent
Gera artefatos Laravel a partir de schemas SQL MySQL/MariaDB
Requires
- php: ^8.2
- illuminate/console: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
- laravel/prompts: ^0.3
Requires (Dev)
- orchestra/testbench: ^9.0|^10.0
- phpunit/phpunit: ^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-08 21:26:44 UTC
README
Gera artefatos Laravel a partir de schemas e dumps SQL MySQL/MariaDB.
Documentação: gui1535.github.io/sql-to-eloquent
A biblioteca interpreta dumps MySQL/MariaDB (sem executá-los) e cria migrations, models Eloquent, controllers CRUD, Form Requests, seeders, rotas API e auth Sanctum opcional.
Requisitos
- PHP 8.2+
- Laravel 11 ou 12
Instalação
composer require gui1535/sql-to-eloquent
O service provider é registrado automaticamente.
Publique a configuração (opcional):
php artisan vendor:publish --tag=sql-to-eloquent-config
Uso
php artisan sql:gerar caminho/para/schema.sql
No modo interativo, o comando:
- Mostra um resumo do schema e avisos de parse
- Pergunta o preset: Essencial, API completa ou Personalizado
- No personalizado, pergunta artefatos/tabelas/CRUD/SoftDeletes (lista positiva)
- Pergunta tabela de users e colunas de e-mail/senha (quando fizer sentido)
- Exibe plano compacto (
--detalhadolista tudo) - Confirma, instala API se preciso, ajusta users/factory padrão e grava
- Mostra próximos passos (
migrate,db:seed,route:list)
Exemplos
Geração interativa:
php artisan sql:gerar database/schema.sql
Preset essencial (migrations + models + seeders):
php artisan sql:gerar database/schema.sql --preset=essencial --sem-interacao
API completa:
php artisan sql:gerar database/schema.sql \ --preset=api \ --tabela-users=usuarios \ --campo-email=email \ --campo-senha=senha \ --sem-interacao
Filtrar tabelas e simular sem gravar:
php artisan sql:gerar database/schema.sql \ --tabelas=usuarios,pedidos \ --dry-run
Opções da CLI
| Opção | Descrição |
|---|---|
arquivo |
Caminho do arquivo SQL |
--preset= |
essencial, api ou personalizado |
--artefatos= |
Lista separada por vírgula: migrations, models, controllers, seeders, rotas, auth (controllers já inclui Form Requests) |
--auth |
Gera autenticação API (login/register/logout com Sanctum) |
--sem-install-api |
Não executa php artisan install:api (cria routes/api.php cru; Sanctum pode faltar) |
--detalhado |
Lista todos os arquivos no plano e no resumo |
--tabelas= |
Filtra tabelas (separadas por vírgula) |
--tabelas-crud= |
Tabelas com Controller CRUD + Form Requests |
--soft-deletes |
Ativa SoftDeletes nas tabelas incluídas |
--sem-soft-delete= |
Tabelas sem SoftDeletes (usar com --soft-deletes) |
--tabelas-soft-delete= |
Lista explícita de tabelas com SoftDeletes |
--tabela-users= |
Tabela de autenticação Laravel (users, usuarios, ou nenhuma) |
--campo-email= |
Coluna de e-mail da tabela de auth |
--campo-senha= |
Coluna de senha da tabela de auth |
--dir-migrations= |
Diretório de saída das migrations |
--dir-models= |
Diretório de saída dos models |
--dir-controllers= |
Diretório de saída dos controllers |
--dir-seeders= |
Diretório de saída dos seeders |
--namespace-models= |
Namespace dos models |
--namespace-controllers= |
Namespace dos controllers |
--sobrescrever |
Permite sobrescrever arquivos existentes |
--dry-run |
Mostra o plano sem gravar arquivos |
--sem-interacao |
Executa sem perguntas (também aplica .bak da migration users e ajuste da UserFactory sem confirmar) |
O que é gerado
Migrations
Uma migration por tabela, ordenada pelas foreign keys, com mapeamento para Blueprint (id(), string, decimal, enum, índices, FKs, etc.).
Models
$table,$fillable,$hidden,$casts- Timestamps padrão ou
CREATED_AT/UPDATED_AT(criado_em/atualizado_em) - Relacionamentos:
belongsTo,hasMany,hasOne,belongsToMany(pivots) - SoftDeletes opcional; auth com
getAuthPasswordName()quando a senha não forpassword
Controllers, Form Requests, rotas e auth
Controllers CRUD com with() nos relacionamentos e Form Requests (Store / Update com sometimes e exists: nas FKs).
Rotas API (routes/sql-to-eloquent.php) usam apiResource()->parameters([...]) com singular em português (ex.: cupons/{cupom}, fornecedores/{fornecedor}). Autenticação API (Sanctum) é opcional quando há tabela de users.
Ao gravar, o pacote pode: criar/registrar routes/api.php, fazer require de sql-to-eloquent.php, mover create_users_table para .bak e ajustar UserFactory (name→nome, password→senha). Avisos já resolvidos por esses ajustes não reaparecem no resumo.
Pivots N:N não geram CRUD.
Seeders
Gerados somente quando o SQL contém INSERT, com DatabaseSeeder na ordem das FKs.
Configuração
Arquivo publicado: config/sql-to-eloquent.php
return [ 'caminhos' => [ 'migrations' => database_path('migrations'), 'models' => app_path('Models'), 'controllers' => app_path('Http/Controllers'), 'requests' => app_path('Http/Requests'), 'seeders' => database_path('seeders'), 'rotas' => base_path('routes'), ], 'artefatos' => [ 'migrations' => true, 'models' => true, 'controllers' => false, 'requests' => false, 'seeders' => true, 'rotas' => false, 'auth' => false, ], 'sobrescrever' => false, 'soft_deletes' => false, 'namespace_models' => 'App\\Models', 'namespace_controllers' => 'App\\Http\\Controllers', 'namespace_requests' => 'App\\Http\\Requests', 'tabela_users' => null, 'campo_email' => null, 'campo_senha' => null, ];
O default da config (e o preset essencial) gera migrations + models + seeders. Controllers, rotas e auth ficam off até o preset api ou o modo personalizado.
Comportamento de segurança
- O SQL de entrada não é executado
- Arquivos existentes não são sobrescritos sem
--sobrescrever(ou confirmação interativa) - Estruturas não suportadas geram avisos em vez de código incorreto silencioso
Suporte SQL
Dialectos: MySQL e MariaDB.
O parser interpreta:
CREATE TABLEALTER TABLE(ADD/DROP/MODIFY/CHANGECOLUMN, índices e foreign keys, inclusiveAFTER)CREATE INDEX/CREATE UNIQUE INDEXINSERT
Statements como CREATE VIEW ainda são ignorados com aviso claro.
Limitações atuais
- Não gera factories novas, API resources nem policies
- Algumas variantes avançadas de
ALTER TABLE(rename de tabela, conversão de charset, drop de constraints) ainda são ignoradas com aviso - Singularização de nomes segue regras em português e pode precisar ajuste em casos raros
--sem-install-apiregistra rotas, masHasApiTokensexige Sanctum (php artisan install:api)
Testes
composer install ./vendor/bin/phpunit
Licença
MIT