Laravel 13.33 Nouveauté Publié le

Relire les colonnes calculées par la base avec #[Refreshes]

Un modèle marqué #[Refreshes] relit, après chaque écriture, les colonnes que la base remplit elle-même : valeur par défaut, colonne générée.

Notions abordées : Eloquent

Nouveau dans Laravel 13.33. Quand la base remplit une colonne elle-même (une valeur par défaut, une colonne générée, un déclencheur), le modèle ne la connaît pas après save() : il faut le relire avec refresh(), qui recharge toutes les colonnes. L'attribut #[Refreshes] désigne les colonnes à relire après chaque écriture.

Avant

$commande = Commande::create($donnees);
$commande->refresh(); // sinon $commande->total vaut null

Depuis Laravel 13.33

#[Refreshes(['statut', 'total'])]
class Commande extends Model
{
}

Après une insertion, une mise à jour ou un increment(), Eloquent relit ces colonnes, et seulement elles, par une seule requête. On peut aussi les déclarer dans la propriété protected array $refreshes.

À faire

La table commandes calcule total (quantite × prix_unitaire, colonne générée) et donne à statut la valeur en_attente par défaut. L'API renvoie la commande juste après l'avoir créée ou modifiée, mais ces champs y sont faux : null pour les deux à la création, l'ancien total après une modification. Corrigez le modèle Commande avec #[Refreshes], sans toucher au contrôleur.

D'où vient la fonctionnalité : la pull request d'origine.