laravie / cabinet
Laravel Eloquent 的运行时缓存
v3.0.2
2021-04-18 16:28 UTC
Requires
- php: ^7.3 || ^8.0
- illuminate/cache: ^6.0 || ^7.0 || ^8.0
- illuminate/database: ^6.0 || ^7.0 || ^8.0
Requires (Dev)
- laravel/legacy-factories: ^1.0.4
- orchestra/canvas: ^4.5 || ^5.0 || ^6.1
- orchestra/testbench: ^4.16 || ^5.18 || ^6.17
- predis/predis: ^1.1
README
Cabinet 允许您将运行时或持久缓存附加到任何 Laravel Eloquent 实例。
安装
通过 composer 安装,只需在您的 composer.json 文件中添加以下内容
{
"require": {
"laravie/cabinet": "^3.0"
}
}
然后从终端运行 composer install 或 composer update。
快速安装
以上安装也可以通过以下命令简化
composer require "laravie/cabinet=^3.0"
用法
在模型上设置 Cabinet
您首先需要将 Laravie\Cabinet\Cabinet 添加到 Eloquent 模型,例如
<?php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; use Laravie\Cabinet\Cabinet; class User extends Authenticatable { use Cabinet; }
允许持久缓存
要在 Eloquent 中添加持久缓存,您必须附加一个支持标签的缓存存储(当使用 file 或 database 缓存驱动时,不支持缓存标签)。
<?php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; use Laravie\Cabinet\Cabinet; class User extends Authenticatable { use Cabinet; /** * Configure cabinet for the eloquent model. * * @param \Laravie\Cabinet\Repository $cabinet * @return void */ protected function onCabinet($cabinet) { $cabinet->setStorage(resolve('cache.store')); } }
存储数据
运行时
Laravie\Cabinet\Repository::share(string $key, callable $callback);
此方法允许通过闭包/可调用 $callback 将值注册为 $key。
$user->cabinet()->share('birthday', static function ($user) { return now()->diffInDays($user->birthdate); });
带有 TTL 的持久化
Laravie\Cabinet\Repository::share(string $key, callable $callback, $ttl = null);
通过添加第三个参数 $ttl(以秒为单位),Cabinet 将尝试将数据存储在缓存中 $ttl 秒。
$user->cabinet()->share('birthday', static function ($user) { return now()->diffInDays($user->birthdate); }, 60);
永久
Laravie\Cabinet\Repository::forever(string $key, callable $callback);
您可以使用 forever 作为第三个参数使用 share,或者使用 forever 来无限期地缓存值。
$user->cabinet()->share('birthday', static function ($user) { return now()->diffInDays($user->birthdate); }, 'forever'); // or $user->cabinet->forever('birthday', static function ($user) { return now()->diffInDays($user->birthdate); })
检索数据
Laravie\Cabinet\Repository::get(string $key);
使用 get 方法检索数据。
$user->cabinet()->get('birthday'); // or $user->cabinet('birthday');
遗忘数据
Laravie\Cabinet\Repository::forget(string $key);
通过给定的 $key 忘记任何数据。
$user->cabinet()->forget('birthday');
清除所有数据
Laravie\Cabinet\Repository::flush();
清除 Eloquent 模型的所有数据。
$user->cabinet()->flush();