bennett-treptow/laravel-cached-mutators
Composer 安装命令:
composer require bennett-treptow/laravel-cached-mutators
包简介
Cached model mutators
README 文档
README
This package provides a trait for your Eloquent models to automatically cache any mutators and attributes you choose. Good use cases for this trait are for expensive mutators that you only want to run once per request / certain time period and want to keep your mutator code free from any manual caching.
This package works by hooking into the Eloquent model's getAttributeValue function, and passing thru the value if the specified attribute does not need to be cached as per the $cacheAttributes.
Install
composer require bennett-treptow/laravel-cached-mutators
Usage
Basic Usage
<?php use CachedMutators\HasCachedMutators; /** * @property string $customer_id * @property \Stripe\Customer $associated_stripe_customer */ class MyModel extends Model { use HasCachedMutators; //declare your auto cached attribute keys protected $cacheAttributes = [ 'associated_stripe_customer' ]; /** * @return \Stripe\Customer */ public function getAssociatedStripeCustomer(){ //call to an external service such as Stripe //this call will be proxied through the Cache //and will only call the external service once return \Stripe\Customer::retrieve($this->customer_id); } }
Advanced Usage
<?php use CachedMutators\HasCachedMutators; /** * @property string $customer_id * @property \Stripe\Customer $associated_stripe_customer * @property \Stripe\Source[] $associated_payment_methods */ class MyModel extends Model { use HasCachedMutators; //declare your auto cached attribute keys protected $cacheAttributes = [ 'associated_stripe_customer' => [ 'store' => 'redis', 'ttl' => null ], 'associated_payment_methods' => [ 'store' => 'redis', 'ttl' => 1000 ] ]; /** * @return \Stripe\Customer */ public function getAssociatedStripeCustomer(){ //call to an external service such as Stripe //this call will be proxied through the Cache //and will only call the external service once return \Stripe\Customer::retrieve($this->customer_id); } /** * @return \Stripe\Source[] */ public function getAssociatedPaymentMethods(){ return \Stripe\Customer::allSources($this->customer_id, [ 'object' => 'card', 'limit' => 3 ]); } }
<?php use CachedMutators\HasCachedMutators; /** * @property string $customer_id * @property \Stripe\Customer $associated_stripe_customer * @property \Stripe\Source[] $associated_payment_methods */ class MyModel extends Model { use HasCachedMutators; public static function defaultCacheStore(){ return 'redis'; } public static function defaultCacheTTL(){ return 60; } //declare your auto cached attribute keys protected $cacheAttributes = [ 'associated_stripe_customer', //will receive redis as its store and ttl of 60 'associated_payment_methods' => [ 'ttl' => 600 //will override the default specified above ] ]; /** * @return \Stripe\Customer */ public function getAssociatedStripeCustomer(){ //call to an external service such as Stripe //this call will be proxied through the Cache //and will only call the external service once return \Stripe\Customer::retrieve($this->customer_id); } /** * @return \Stripe\Source[] */ public function getAssociatedPaymentMethods(){ return \Stripe\Customer::allSources($this->customer_id, [ 'object' => 'card', 'limit' => 3 ]); } }
The $cacheAttributes array can be configured to cache mutators per attribute by defining store and ttl.
By default, the store will follow your application's default cache store, which is usually the file store.
Defining a ttl will call the cache repository's remember function, and making ttl null or not part of the array will use the cache repository's rememberForever function.
You may also override the defaultCacheStore() and defaultCacheTTL() functions on your models to expedite the process of choosing where each attribute is cached.
Clearing Cached Mutators
Need to clear your cached mutators to get a fresh copy?
clearCachedMutators($key = null)
<?php $myModel = new MyModel(); $stripeCustomer = $myModel->associated_stripe_customer; //do some stuff.. $myModel->clearCachedMutators(); //will clear all declared mutators in $cacheAttributes $myModel->clearCachedMutators('associated_stripe_customer'); //to just clear one key
bennett-treptow/laravel-cached-mutators 适用场景与选型建议
bennett-treptow/laravel-cached-mutators 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4.03k 次下载、GitHub Stars 达 4, 最近一次更新时间为 2020 年 01 月 13 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「cache」 「mutators」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 bennett-treptow/laravel-cached-mutators 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 bennett-treptow/laravel-cached-mutators 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 bennett-treptow/laravel-cached-mutators 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
repository php library
Data Transfer Objects with Attribute Casting and Date Mutators.
Reusable accessors/mutators (getters/setters) for Laravel 5's Eloquent
Value object mutation solution for Laravel 5.
Laravel 5 - Repositories to the database layer
Laravel Time Craft is a powerful package for handling date and time scopes in your Laravel applications. It provides a set of convenient traits and helper functions to simplify date and time operations.
统计信息
- 总下载量: 4.03k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 4
- 点击次数: 7
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-01-13