Depuis une base existante
Vous travaillez sur un projet legacy ? Pointez le générateur sur la base de données et obtenez une API complète, testée et documentée pour chaque table, sans retaper le moindre schéma.
Usage
php artisan make:fullapi --from-databasephp artisan make:fullapi --from-database --tables=products,ordersphp artisan make:fullapi --from-database --with-migrationsLa première forme convertit toutes les tables utilisateur ; les tables système sont ignorées automatiquement. --tables= restreint la génération aux tables listées, et --with-migrations écrit aussi les fichiers de migration, utile pour versionner une base construite à la main.
Ce que l'introspection détecte
L'introspection lit bien plus que des noms de colonnes :
- Les colonnes avec leurs types et leur nullabilité, converties en règles de validation, casts, factories, types de DTO et PHPDoc du modèle. Un
VARCHAR(255) NOT NULL UNIQUEdevientrequired|string|max:255|unique:...plus une valeur de factory unique. - Les clés étrangères (contraintes réelles sur Laravel 11+, plus la convention de nommage
<table>_id) deviennent des relationsbelongsTo, avec lehasManyinverse sur le modèle parent : les deux côtés typés dans le PHPDoc. - Les tables pivot (deux clés étrangères, rien d'autre) deviennent
belongsToManysur les deux modèles, au lieu d'une entité intermédiaire inutile. - Les paires polymorphiques : les colonnes
commentable_type+commentable_idsont détectées comme une vraie relationmorphTo. - Les colonnes enum deviennent des backed enums PHP natifs avec cast et validation
Rule::enum(). deleted_atactive les soft deletes (trait, endpoints restore/force-delete).
Garde-fous par défaut
- Les migrations ne sont pas régénérées par défaut : les tables existent déjà. Passez
--with-migrationsquand vous les voulez comme référence versionnée. - La table
usersest ignorée pour que votreapp/Models/User.phppersonnalisé ne soit jamais écrasé. Passez--tables=usersexplicitement si vous y tenez.
Inspecter sans générer
La commande api-generator:introspect émet le schéma en JSON, pour que n'importe quel outillage puisse construire dessus. Lancée sans argument, elle liste toutes les tables utilisateur (migrations, sessions et personal_access_tokens sont filtrées) ; pointée sur une table, elle en décrit les colonnes, les types normalisés et le flag soft deletes :
php artisan api-generator:introspectphp artisan api-generator:introspect --table=productsC'est ce qui alimente la fonctionnalité Import from Database de l'extension VS Code.
Le gain
Base legacy à 9h00, API REST documentée et testée à 9h15 :
php artisan make:fullapi --from-database --tables=posts,categories,comments --pest --postman
php artisan test
php artisan serveLa suite de tests passe telle quelle, et si Scramble est installé la documentation interactive est déjà en ligne sur /docs/api.
