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();