Rumah >pembangunan bahagian belakang >tutorial php >Prestasi dan objek nilai di aksesor laravel

Prestasi dan objek nilai di aksesor laravel

Robert Michael Kim
Robert Michael Kimasal
2025-03-05 15:37:21458semak imbas

Performance and Value Objects in Laravel Accessors

Laravel Eloquent Orm meningkatkan aksesor dengan sokongan caching terbina dalam dan nilai objek, menyelaraskan pengiraan kompleks dan pengurusan data berstruktur. Ini menghasilkan kod yang lebih bersih, lebih banyak dikekalkan, terutamanya bermanfaat untuk tugas -tugas yang intensif secara intensif atau ketika mewakili struktur data yang rumit sebagai objek dan bukannya array mudah. ​​

Pendekatan ini amat berguna untuk operasi pengiraan yang mahal atau ketika mewakili struktur data kompleks sebagai objek yang tepat dan bukannya array mudah. ​​

Berikut adalah contoh yang menunjukkan pengendalian lokasi menggunakan objek nilai:

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

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

// Access operating hours (dynamically recalculated)
$hours = $store->operatingHours;
memanfaatkan keupayaan aksesor Laravel menawarkan penyelesaian yang cekap untuk menguruskan data yang kompleks dan mengoptimumkan prestasi melalui caching strategik.

Atas ialah kandungan terperinci Prestasi dan objek nilai di aksesor laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn