Types de champs & clés primaires
Les champs se déclarent en paires nom:type, séparées par des virgules :
bash
php artisan make:fullapi Product --fields="name:string,price:decimal,stock:integer,meta:json"Types supportés
| Type | Colonne BDD | Type PHP | Règle de validation |
|---|---|---|---|
string | VARCHAR(255) | string | string|max:255 |
text | TEXT | string | string |
integer / int | INTEGER | int | integer |
bigint | BIGINTEGER | int | integer |
boolean / bool | BOOLEAN | bool | boolean |
float / decimal | DECIMAL(8,2) | float | numeric |
json | JSON | array | json |
date / datetime / timestamp | TIMESTAMP | DateTimeInterface | date |
uuid | UUID | string | uuid |
enum(a,b,...) | ENUM('a','b') | backed enum + cast | Rule::enum() |
Chaque type se propage dans toute la pile : colonne de migration, règles de validation, cast du modèle, valeur de factory, type de propriété du DTO et @property du PHPDoc.
Champs enum natifs
bash
php artisan make:fullapi Article --fields="title:string,status:enum(draft,published,archived)"Une seule définition de champ produit toute la chaîne :

app/Enums/Status.php: unenum Status: stringavec un case par valeur- Modèle :
'status' => \App\Enums\Status::classdans$castset@property \App\Enums\Status $statusdans le PHPDoc - Request : validation
Rule::enum(Status::class) - Factory :
fake()->randomElement(Status::cases()) - Migration :
$table->enum('status', ['draft', 'published', 'archived'])
Dans un fichier de schéma :
yaml
status: enum(draft,published) default=draftClés primaires personnalisées
Ajoutez :primary (CLI) ou le modificateur primary (fichier de schéma) pour faire d'un champ la clé primaire à la place de l'id auto-incrémenté :
bash
php artisan make:fullapi Country --fields="code:string:primary,name:string"Toute la pile suit automatiquement :
- Migration :
$table->string('code')->primary(), pas de$table->id() - Modèle :
$primaryKey,$incrementing = false,$keyTypedéclarés - Relations entrantes : la FK est nommée
country_code, typée comme la clé, avec->references('code')dans la migration etexists:countries,codeen validation - Les tests générés utilisent
getKey()pour passer avec les deux styles de clé
Nullable, unique et valeurs par défaut
La syntaxe --fields s'en tient à nom:type. Pour les contraintes par champ, utilisez l'assistant interactif ou un fichier de schéma, qui accepte un raccourci ou un mapping :
yaml
fields:
title: string
slug: string unique
content: text nullable
views: { type: integer, default: 0 }