Zum Hauptinhalt springen

Zurück zur README · Erste Schritte →

Laravel Model Settings

Laravel Model Settings speichert gemeinsame Standardwerte und modellspezifische Überschreibungen in einer separaten Datenbanktabelle. Verwende das Paket, wenn jedes Modell mit demselben Wert beginnen soll, einzelne Datensätze ihn aber überschreiben dürfen.

Das Paket fügt den übergeordneten Tabellen keine Einstellungsspalten hinzu. Die Einstellungen bleiben vom Modellschema unabhängig und werden nach der Eloquent-Morph-Klasse des Modells gruppiert.

Wann das Paket passt​

AnforderungVerhalten des Pakets
Allen gespeicherten Modellen denselben Anfangswert gebenEinen Standardwert auf Klassenebene speichern
Den Wert eines Modells ändernEine modellspezifische Überschreibung speichern
Eine Überschreibung entfernenDen Klassenstandard wieder verwenden
Viele Modelle lesenEine Relation mit Standardwerten und Überschreibungen vorab laden

Auflösungsreihenfolge​

Beim Lesen einer Einstellung gibt das Paket den ersten verfügbaren Wert zurück:

  1. Die Überschreibung des gespeicherten Modells.
  2. Den Standardwert für die Klasse dieses Modells.
  3. null.
Quelletimezone
Standardwert für UserUTC
Überschreibung für Benutzer 123Europe/Paris
Effektiver Wert für Benutzer 123Europe/Paris
Effektiver Wert für einen anderen gespeicherten BenutzerUTC

Das Entfernen einer Überschreibung macht den Standardwert wieder sichtbar. Der Standardwert selbst wird nicht gelöscht.

Kernoperationen​

(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() gibt einen effektiven Wert zurück. all() gibt eine Illuminate\Support\Collection zurück, in der Standardwerte und Überschreibungen zusammengeführt sind. Verwende has(), wenn die Existenz eines effektiven Schlüssels relevant ist, auch bei einem gespeicherten JSON-null. get() akzeptiert absichtlich keinen vom Aufrufer angegebenen Ersatzwert: Der persistierte Klassenstandard ist der einzige Rückfallwert, gefolgt von null, wenn der Schlüssel in beiden Bereichen fehlt.

Für Standardwerte und Überschreibungen stehen dieselben Operationen bereit: all(), get(), has(), set(), setMany(), forget(), forgetMany() und purge().

Klare Paketgrenzen​

Laravel Model Settings ist ein fokussiertes Eloquent-Paket und kein allgemeines Framework für Anwendungseinstellungen.

GrenzeBeabsichtigtes Verhalten
SpeicherungEine Datenbanktabelle; kein Redis-Backend und keine Speicherung in Feldern des übergeordneten Modells
StandardwerteReservierte Zeilen in derselben Tabelle; keine zweite Standardwerttabelle
RegistrierungKeine Repository-Registry, typisierten globalen Einstellungsklassen oder Klassenerkennung
MigrationenKein Migrations-Runner pro Einstellungsschlüssel
CachingKein verpflichtender Cache über mehrere Requests; Eager Loading verwendet nur eine geladene Relation erneut

Anwendungen mit solchen Anforderungen müssen die Funktionen außerhalb dieses Pakets zusammensetzen, statt modelSettings oder das interne Repository als Erweiterungs-API zu behandeln.

Speichergrenzen​

Jede Zeile wird durch vier Werte identifiziert:

WertBedeutung
item_typeMorph-Klasse oder Morph-Map-Alias des übergeordneten Modells
item_idPrimärschlüssel des übergeordneten Modells; Klassenstandards behalten den physischen Wert 0
is_defaulttrue für einen Klassenstandard, false für eine Modellüberschreibung
keyName der Einstellung

Dadurch bleiben Standardwerte für jede Modellklasse unabhängig. Ein User-Standard wird nie zum Post-Standard, selbst wenn beide Klassen denselben Einstellungsschlüssel verwenden.

Unterstützte Modelle​

Das Paket unterstützt Eloquent-Modelle mit ganzzahligen, Zeichenfolgen-, UUID- oder ULID- Primärschlüsseln. Gespeicherte Modelle mit der Ganzzahl-ID 0 oder der Zeichenfolge '0' können Überschreibungen speichern, ohne mit Klassenstandards zu kollidieren. Modelle können außerdem eine Laravel Morph Map verwenden.

Modellspezifische Einstellungen gehören zu gespeicherten Modellen. Ein ungespeichertes Modell erbt keine Standardwerte: get() gibt null, has() gibt false und all() eine leere Collection zurück. set(), setMany(), forget(), forgetMany() oder purge() für einen ungespeicherten Besitzer lösen vor einer Speicherabfrage eine InvalidSettingsOwnerException aus.

Payloads werden als JSON gespeichert, einschließlich null, leerer Zeichenfolgen, reiner Leerzeichenfolgen, leerer Arrays, 0 und false. Ohne konfigurierten Cast geben Lesevorgänge den exakt dekodierten Wert zurück. Payload-Casts können stattdessen anwendungsspezifische Objekte zurückgeben.

Siehe auch​