97 lines
2.6 KiB
PHP
Executable File
97 lines
2.6 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Traits;
|
|
|
|
use Error;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
trait HasCacheModel
|
|
{
|
|
public function getCacheKey(): string
|
|
{
|
|
try {
|
|
return constant(get_class($this) . '::' . 'CACHE_KEY');
|
|
} catch (Error $e) {
|
|
return $this->getTable();
|
|
}
|
|
}
|
|
|
|
public static function getByCache(): Collection
|
|
{
|
|
$cache = Cache::get((new self)->getCacheKey());
|
|
if (empty($cache)) {
|
|
Cache::rememberForever((new self)->getCacheKey(), function () {
|
|
return self::all();
|
|
});
|
|
$cache = Cache::get((new self)->getCacheKey());
|
|
}
|
|
return $cache;
|
|
}
|
|
|
|
public static function getActiveCache($field = 'is_active'): Collection
|
|
{
|
|
$cache = Cache::get((new self)->getCacheKey());
|
|
if (empty($cache)) {
|
|
Cache::rememberForever((new self)->getCacheKey(), function () {
|
|
return self::all();
|
|
});
|
|
$cache = Cache::get((new self)->getCacheKey());
|
|
}
|
|
return $cache->where($field, 1);
|
|
}
|
|
|
|
public function newEloquentBuilder($query)
|
|
{
|
|
$cacheKey = $this->getCacheKey();
|
|
|
|
return new class($query, $cacheKey) extends Builder
|
|
{
|
|
protected $cache_key;
|
|
|
|
public function __construct($query, $cacheKey)
|
|
{
|
|
parent::__construct($query);
|
|
$this->cache_key = $cacheKey;
|
|
}
|
|
|
|
public function delete()
|
|
{
|
|
Cache::delete($this->cache_key);
|
|
return parent::delete();
|
|
}
|
|
|
|
public function create(array $attributes = [])
|
|
{
|
|
Cache::delete($this->cache_key);
|
|
return parent::create($attributes);
|
|
}
|
|
|
|
public function update(array $values)
|
|
{
|
|
Cache::delete($this->cache_key);
|
|
return parent::update($values);
|
|
}
|
|
|
|
public function updateOrCreate(array $attributes, array | null $values = [])
|
|
{
|
|
Cache::delete($this->cache_key);
|
|
return parent::updateOrCreate($attributes, $values);
|
|
}
|
|
};
|
|
}
|
|
|
|
public static function destroy(...$args)
|
|
{
|
|
Cache::delete((new self)->getCacheKey());
|
|
return parent::destroy(...$args);
|
|
}
|
|
|
|
public function update(...$args)
|
|
{
|
|
Cache::delete((new self)->getCacheKey());
|
|
return parent::update(...$args);
|
|
}
|
|
}
|