Aller au contenu principal

Retour au README · Premiers pas →

Laravel Model Settings

Laravel Model Settings stocke les paramètres par défaut partagés et les surcharges propres à chaque modèle dans une table de base de données distincte. Utilisez-le lorsque tous les modèles doivent commencer avec la même valeur, mais que certains enregistrements peuvent la remplacer.

Le paquet n’ajoute aucune colonne de paramètres aux tables parentes. Les paramètres restent indépendants du schéma du modèle et sont regroupés selon la classe morph Eloquent du modèle.

Quand utiliser ce paquet​

BesoinComportement du paquet
Donner la même valeur initiale à tous les modèles enregistrésStocker une valeur par défaut au niveau de la classe
Modifier la valeur d’un modèleStocker une surcharge propre à ce modèle
Supprimer une surchargeRéutiliser la valeur par défaut de la classe
Lire plusieurs modèlesCharger une relation pour les valeurs par défaut et les surcharges

Ordre de résolution​

Lors de la lecture d’un paramètre, le paquet renvoie la première valeur disponible :

  1. La surcharge du modèle enregistré.
  2. La valeur par défaut de la classe de ce modèle.
  3. null.
Sourcetimezone
Valeur par défaut de UserUTC
Surcharge de l’utilisateur 123Europe/Paris
Valeur effective de l’utilisateur 123Europe/Paris
Valeur effective d’un autre utilisateur enregistréUTC

La suppression d’une surcharge rend de nouveau visible la valeur par défaut. Elle ne supprime pas cette valeur par défaut.

Opérations principales​

(new User)->defaultSettings()->set('timezone', 'UTC');

$user->settings()->set('timezone', 'Europe/Paris');

$timezone = $user->settings()->get('timezone');
$settings = $user->settings()->all();
$hasTimezone = $user->settings()->has('timezone');

$user->settings()->setMany([
'locale' => 'fr',
'notifications.email' => true,
]);
$user->settings()->forgetMany(['timezone', 'locale']);

get() renvoie une valeur effective. all() renvoie une Illuminate\Support\Collection contenant les valeurs par défaut fusionnées avec les surcharges. Utilisez has() lorsque l’existence d’une clé effective importe, y compris lorsque la valeur stockée est le JSON null. get() n’accepte volontairement aucune valeur de repli fournie par l’appelant : la valeur persistante par défaut de la classe est son seul repli, puis null est renvoyé si aucune portée ne contient la clé.

Les valeurs par défaut et les surcharges utilisent les mêmes opérations : all(), get(), has(), set(), setMany(), forget(), forgetMany() et purge().

Limites ciblées du paquet​

Laravel Model Settings est un paquet Eloquent ciblé, et non un framework général de paramètres d’application.

LimiteComportement volontaire
StockageUne table de base de données ; ni Redis ni stockage dans les champs du modèle parent
Valeurs par défautLignes réservées dans la même table ; aucune seconde table de valeurs par défaut
EnregistrementAucun registre de dépôts, aucune classe globale typée de paramètres ni découverte de classes
MigrationsAucun exécuteur de migrations par clé de paramètre
CacheAucun cache inter-requêtes obligatoire ; le chargement anticipé ne réutilise que la relation chargée

Les applications qui ont besoin de ces fonctions doivent les composer en dehors du paquet plutôt que d’utiliser modelSettings ou le dépôt interne comme API d’extension.

Limites du stockage​

Chaque ligne est identifiée par quatre valeurs :

ValeurSignification
item_typeClasse morph du modèle parent ou alias de la morph map
item_idClé primaire du parent ; les valeurs par défaut de la classe conservent la valeur physique 0
is_defaulttrue pour une valeur par défaut de classe, false pour une surcharge de modèle
keyNom du paramètre

Les valeurs par défaut sont ainsi indépendantes pour chaque classe de modèle. Une valeur par défaut de User ne devient jamais une valeur par défaut de Post, même si les deux classes utilisent la même clé de paramètre.

Modèles pris en charge​

Le paquet prend en charge les modèles Eloquent dont la clé primaire est un entier, une chaîne, un UUID ou un ULID. Les modèles enregistrés avec l’identifiant entier 0 ou la chaîne '0' peuvent stocker des surcharges sans entrer en conflit avec les valeurs par défaut de la classe. Les modèles peuvent aussi utiliser une morph map Laravel.

Les paramètres propres à un modèle nécessitent un modèle enregistré. Un modèle non enregistré n’hérite pas des valeurs par défaut : get() renvoie null, has() renvoie false et all() une collection vide. Appeler set(), setMany(), forget(), forgetMany() ou purge() pour un propriétaire non enregistré lève InvalidSettingsOwnerException avant toute requête de stockage.

Les données sont stockées au format JSON, y compris null, les chaînes vides ou composées d’espaces, les tableaux vides, zéro et false. Sans conversion configurée, la lecture renvoie exactement la valeur décodée. Les conversions des données peuvent renvoyer des objets propres à l’application.

Voir aussi​