astrotomic/laravel-cachable-attributes

0.5.0 2023-04-25 09:38 UTC

This package is auto-updated.

Last update: 2024-08-25 12:34:07 UTC


README

Latest Version MIT License Offset Earth Larabelles

Total Downloads GitHub Workflow Status StyleCI

如果您想缓存重型属性访问器 - 这个包就是为您准备的!

这个Laravel包提供了一个可以在您的模型中使用的特质,它提供了缓存复杂、长时间运行、重型模型访问器结果的方法。

安装

您只需运行composer require astrotomic/laravel-cachable-attributes。没有ServiceProvider或配置或任何其他内容。

快速示例

有时您有运行附加数据库查询、进行重型计算或需要从某处检索数据的属性。这会减慢您的应用程序,如果您多次访问属性,访问器也会多次执行。

class Gallery extends Model
{
    public function images(): HasMany
    {
        return $this->hasMany(Image::class, 'gallery_id');
    }

    public function getStorageSizeAttribute(): int
    {
        return $this->images()->sum('file_size');
    }
}

此示例会在每次访问$gallery->storage_size时运行求和查询。通过使用特质,您可以防止这种情况。

use Astrotomic\CachableAttributes\CachableAttributes;
use Astrotomic\CachableAttributes\CachesAttributes;

class Gallery extends Model implements CachableAttributes
{
    use CachesAttributes;

    protected $cachableAttributes = [
        'storage_size',
    ];

    public function images(): HasMany
    {
        return $this->hasMany(Image::class, 'gallery_id');
    }

    public function getStorageSizeAttribute(): int
    {
        return $this->remember('storage_size', 0, function(): int {
            return $this->images()->sum('file_size');
        });
    }
}

这将仅在请求期间运行一次数据库查询。0的ttl意味着仅缓存当前运行时间。您也可以使用nullrememberForever()来永久记住值(直到手动删除)。或者使用任何正数来缓存指定秒数。

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。您也可能对行为准则感兴趣。

安全

如果您发现任何与安全相关的问题,请参阅SECURITY以获取报告步骤。

致谢

Treeware

您可以使用此包,但如果它进入您的生产环境,我将非常感激您为世界买一棵树。

众所周知,解决气候危机并防止我们的气温上升超过1.5C的最佳工具之一是植树。如果您为我的森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。

您可以在offset.earth/treeware购买树木。

有关Treeware的更多信息,请参阅treeware.earth