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
SoftDeletesquand des enregistrements peuvent être référencés historiquement - Définir
$fillableou$guardedexplicitement - 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