laravel eloquent orm verbessert die Zubehör mit integriertem Caching- und Value-Objektunterstützung, optimierender Komplexberechnungen und strukturiertes Datenmanagement. Dies führt zu einem saubereren, wartbareren Code, der für rechnerisch intensive Aufgaben oder bei der Darstellung komplizierter Datenstrukturen als Objekte anstelle von einfachen Arrays vorteilhaft ist.
.Dieser Ansatz ist besonders nützlich für rechnerische Operationen oder bei der Darstellung komplexer Datenstrukturen als ordnungsgemäße Objekte und nicht für einfache Arrays.
Hier ist ein Beispiel, das den Standorthandling mit Wertobjekten zeigt:
<?php namespace App\Models; use App\ValueObjects\Location; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Casts\Attribute; class Store extends Model { protected function location(): Attribute { return Attribute::make( get: fn ($value) => new Location( latitude: $this->latitude, longitude: $this->longitude, address: $this->address, timezone: $this->timezone ), set: function (Location $location) { return [ 'latitude' => $location->latitude, 'longitude' => $location->longitude, 'address' => $location->address, 'timezone' => $location->timezone ]; } )->shouldCache(); } protected function operatingHours(): Attribute { return Attribute::make( get: fn () => $this->calculateHours() )->withoutObjectCaching(); } private function calculateHours() { // Dynamic calculation based on timezone and current time return $this->location->getLocalHours(); } }
Beispiel Verwendung:
$store = Store::find(1); $store->location->address = '123 New Street'; $store->save(); // Access operating hours (dynamically recalculated) $hours = $store->operatingHours;
Die Nutzung von Laravels Accessor -Funktionen bietet effiziente Lösungen für die Verwaltung komplexer Daten und die Optimierung der Leistung über strategisches Caching.
Das obige ist der detaillierte Inhalt vonLeistungs- und Wertobjekte in Laravel Accessors. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!