← Mit Einstellungen arbeiten · Zurück zur README · Konfiguration →
Eager Loading
Einstellungen mit den Modellen laden
Ohne Eager Loading führt jeder Aufruf von settings()->get(), settings()->has() oder
settings()->all() eine Einstellungsabfrage aus. Diese Service-Lesevorgänge laden modelSettings
nicht als Nebeneffekt.
Lade die Relation vorab, wenn das Ergebnis mehrere Modelle enthält:
$users = User::query()
->with('modelSettings')
->get();
$timezones = $users->map(
fn (User $user) => $user->settings()->get('timezone')
);
Die vorab geladene Relation enthält die Überschreibungen jedes Modells sowie alle geerbten
Standardwerte. Nachfolgende Aufrufe von get(), has() und all() verwenden die geladene Relation.
Einstellungen nach der Abfrage laden
Verwende loadMissing(), wenn die Modelle bereits verfügbar sind:
$users->loadMissing('modelSettings');
$settings = $users->map(
fn (User $user) => $user->settings()->all()
);
Relationsgrenze
Verwende modelSettings nur mit with(), load() oder loadMissing() sowie als geladene
Relationseigenschaft. Sie ist eine Leseoptimierung und keine alternative Abfrage- oder CRUD-API.
Lies und ändere Werte über settings() oder defaultSettings().
Abfrageverhalten
Wenn übergeordnete Modelle abgerufen und ihre Einstellungen anschließend gelesen werden, kosten Lazy Loading und Eager Loading für ein Modell gleich viel. Bei einer Collection ist der Unterschied sichtbar:
| Geladene übergeordnete Modelle | Lazy Loading | Eager Loading |
|---|---|---|
| 1 | 2 Abfragen | 2 Abfragen |
| N | 1 + N Abfragen | 2 Abfragen |
Der Eager-Loading-Pfad verwendet:
- Eine Abfrage für die übergeordneten Modelle.
- Eine Abfrage für deren Standardwerte und Überschreibungen.
Die Einstellungsabfrage enthält die Klassenstandards und alle angeforderten Modell-IDs. Die Relation kopiert anschließend geerbte Standardwerte in das geladene Ergebnis jedes Modells und ersetzt passende Schlüssel durch die Überschreibungen dieses Modells.
Dieses Verhalten ist für ganzzahlige, Zeichenfolgen-, UUID- und ULID-Primärschlüssel abgedeckt.
Änderungen nach dem Eager Loading
Nach einem erfolgreichen set(), setMany(), forget(), forgetMany() oder purge() löscht das
Paket die geladene Relation modelSettings des betroffenen Modells genau einmal. Der nächste
Service-Lesevorgang fragt den aktuellen effektiven Wert ab und gibt keine veralteten Daten zurück.
Eine fehlgeschlagene gebündelte Änderung behält die geladene Relation bei und setzt den
transaktionalen Batch zurück.
Lade die Relation vor einem weiteren gebündelten Lesevorgang erneut explizit:
$user->settings()->setMany([
'timezone' => 'Europe/Paris',
'locale' => 'fr',
]);
$user->load('modelSettings');
Eine Änderung führt weiterhin ihre eigenen Schreibabfragen aus. Eager Loading beeinflusst nur die nachfolgenden Lesevorgänge.
Siehe auch
- Mit Einstellungen arbeiten — verstehen, wie Standardwerte und Überschreibungen zusammengeführt werden.
- API-Referenz — Service-Methoden und Relation unterscheiden.
- Konfiguration — Verbindung und Speichermodell konfigurieren.