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
Libérer: 2025-03-05 15:37:21
original
456 Les gens l'ont consulté

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();
    }
}
Copier après la connexion

Exemple Utilisation:

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

// Access operating hours (dynamically recalculated)
$hours = $store->operatingHours;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal