mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-07-01 23:42:48 +08:00
123 lines
3.0 KiB
PHP
123 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace base\common\model;
|
|
|
|
use think\facade\Cache;
|
|
use think\facade\Env;
|
|
use think\facade\Log;
|
|
use think\helper\Str;
|
|
use think\Model;
|
|
|
|
class BaseModelBase extends Model
|
|
{
|
|
/**
|
|
* 自动清除的缓存值
|
|
*
|
|
* [
|
|
* 'name'=>'',
|
|
* 'type'=>'', // tag/key
|
|
* 'field'=>'' // 为空则不做拼接
|
|
* ]
|
|
*
|
|
* @var array
|
|
*/
|
|
public static $autoCache = [];
|
|
|
|
protected static $uGetList = [];
|
|
|
|
public static function onAfterWrite($model)
|
|
{
|
|
static::autoRemoveCache($model);
|
|
}
|
|
|
|
public static function onAfterDelete($model)
|
|
{
|
|
static::autoRemoveCache($model);
|
|
}
|
|
|
|
public static function onAfterRestore($model)
|
|
{
|
|
static::autoRemoveCache($model);
|
|
}
|
|
|
|
public static function autoRemoveCache($model)
|
|
{
|
|
if (!isset(static::$autoCache['table'])) {
|
|
static::$autoCache['table'] = [
|
|
'name' => 'table',
|
|
'type' => 'tag',
|
|
];
|
|
}
|
|
|
|
if (!isset(static::$autoCache['read'])) {
|
|
static::$autoCache['read'] = [
|
|
'name' => 'read',
|
|
'field' => 'id',
|
|
];
|
|
}
|
|
|
|
foreach (static::$autoCache as $cache_item) {
|
|
$type = $cache_item['type'] ?? 'key';
|
|
|
|
$field = $cache_item['field'] ?? '';
|
|
|
|
$cache_key = $cache_item['name'] ?? '';
|
|
|
|
if (empty($cache_key)) {
|
|
continue;
|
|
}
|
|
|
|
$cache_key = Str::snake($model->getName()) . '_' . $cache_key;
|
|
|
|
if (!empty($field) && !is_null($model->$field)) {
|
|
// 用字段新的值拼接key
|
|
$cache_key_attr = $cache_key . '_' . $model->getAttr($field);
|
|
|
|
static::doRemoveCache($type, $cache_key_attr);
|
|
|
|
// 用字段旧的值拼接key
|
|
$cache_key_original = $cache_key . '_' . $model->getOrigin($field);
|
|
|
|
if ($cache_key_original != $cache_key_attr) {
|
|
static::doRemoveCache($type, $cache_key_original);
|
|
}
|
|
} else {
|
|
static::doRemoveCache($type, $cache_key);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected static function doRemoveCache($type, $cache_key)
|
|
{
|
|
if (Env::get('app.auto_cache_log')) {
|
|
Log::debug("清除 ORM 自动缓存 {$type}:{$cache_key}");
|
|
}
|
|
|
|
if ($type == 'key') {
|
|
Cache::delete($cache_key);
|
|
} else {
|
|
Cache::tag($cache_key)->clear();
|
|
}
|
|
}
|
|
|
|
public static function getClassNameKey()
|
|
{
|
|
return str_replace('\\', '_', static::class);
|
|
}
|
|
|
|
public static function uGet($id, $cache = false)
|
|
{
|
|
if (!isset(static::$uGetList[static::class])) {
|
|
static::$uGetList[static::class] = [];
|
|
}
|
|
|
|
if (isset(static::$uGetList[static::class][$id])) {
|
|
return static::$uGetList[static::class][$id];
|
|
}
|
|
|
|
static::$uGetList[static::class][$id] = static::find($id);
|
|
|
|
return static::$uGetList[static::class][$id];
|
|
}
|
|
}
|