Skip to content

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

TypeColonne BDDType PHPRègle de validation
stringVARCHAR(255)stringstring|max:255
textTEXTstringstring
integer / intINTEGERintinteger
bigintBIGINTEGERintinteger
boolean / boolBOOLEANboolboolean
float / decimalDECIMAL(8,2)floatnumeric
jsonJSONarrayjson
date / datetime / timestampTIMESTAMPDateTimeInterfacedate
uuidUUIDstringuuid
enum(a,b,...)ENUM('a','b')backed enum + castRule::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 :

Un seul champ enum se déploie en cinq fichiers cohérents

  • app/Enums/Status.php : un enum Status: string avec un case par valeur
  • Modèle : 'status' => \App\Enums\Status::class dans $casts et @property \App\Enums\Status $status dans 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=draft

Clé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, $keyType déclarés
  • Relations entrantes : la FK est nommée country_code, typée comme la clé, avec ->references('code') dans la migration et exists:countries,code en 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 }