astrotomic / laravel-cachable-attributes
允许轻松缓存属性访问器值。
0.5.0
2023-04-25 09:38 UTC
Requires
- php: ^7.2 || ^8.0
- illuminate/cache: 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0
- illuminate/contracts: 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0
- illuminate/database: 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0
Requires (Dev)
- illuminate/support: 5.8.* || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0
- orchestra/testbench: 3.8.* || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0
- phpunit/phpunit: ^8.3 || ^9.0
README
如果您想缓存重型属性访问器 - 这个包就是为您准备的!
这个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意味着仅缓存当前运行时间。您也可以使用null
或rememberForever()
来永久记住值(直到手动删除)。或者使用任何正数来缓存指定秒数。
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。您也可能对行为准则感兴趣。
安全
如果您发现任何与安全相关的问题,请参阅SECURITY以获取报告步骤。
致谢
Treeware
您可以使用此包,但如果它进入您的生产环境,我将非常感激您为世界买一棵树。
众所周知,解决气候危机并防止我们的气温上升超过1.5C的最佳工具之一是植树。如果您为我的森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。
您可以在offset.earth/treeware购买树木。
有关Treeware的更多信息,请参阅treeware.earth