Aller au contenu principal

Conventions — Modèles

Les modèles définissent le comportement de persistance, les relations, les casts, les scopes et les attributs dérivés simples.

Règles

  • Utiliser SoftDeletes quand des enregistrements peuvent être référencés historiquement
  • Définir $fillable ou $guarded explicitement
  • Définir les casts pour les booléens, dates, enums, JSON et décimaux
  • Utiliser des clés étrangères explicites quand elles suivent id_*
  • Garder les workflows métier hors des modèles

Exemple de relation

public function role(): BelongsTo
{
return $this->belongsTo(Role::class, 'id_role', 'id_role');
}

public function service(): BelongsTo
{
return $this->belongsTo(Service::class, 'id_service', 'id_service');
}

Exemple de casts

protected function casts(): array
{
return [
'is_active' => 'boolean',
'settings' => 'array',
'api_key' => 'encrypted',
'synced_at' => 'datetime',
'cached_data' => 'array',
];
}

Interdit dans les modèles

// ❌ MAL — trop de logique workflow
public function approveAndNotify(): void
{
$this->status = 'approved';
$this->save();
Notification::send(...);
Log::info(...);
}

// ✅ BIEN — déplacer dans un service
// ApprovalService::approve(User $user, $entity): void