Maison >développement back-end >tutoriel php >Objets de performance et de valeur dans Laravel Accessors

Objets de performance et de valeur dans Laravel Accessors

Robert Michael Kim
Robert Michael Kimoriginal
2025-03-05 15:37:21457parcourir

Performance and Value Objects in Laravel Accessors

Laravel Eloquent Orm améliore les accessoires avec la mise en cache intégrée et la valeur de la prise en charge des objets, la rationalisation des calculs complexes et la gestion structurée des données. Il en résulte un code plus propre et plus maintenable, en particulier bénéfique pour les tâches intensives en calcul ou lorsqu'ils représentent des structures de données complexes en tant qu'objets au lieu de tableaux simples.

Cette approche est particulièrement utile pour les opérations coûteuses en calcul ou lorsqu'ils représentent des structures de données complexes comme des objets appropriés plutôt que des tableaux simples.

Voici un exemple démontrant la manipulation de l'emplacement à l'aide d'objets de valeur:

<?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();
    }
}

Exemple Utilisation:

$store = Store::find(1);
$store->location->address = '123 New Street';
$store->save();

// Access operating hours (dynamically recalculated)
$hours = $store->operatingHours;

Tirer parti des capacités d'accessoires de Laravel offre des solutions efficaces pour gérer les données complexes et optimiser les performances via la mise en cache stratégique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn