/home/brandsfa/www/vendor/rennokki/laravel-eloquent-query-cache/src/Traits/QueryCacheable.php
<?php
namespace Rennokki\QueryCache\Traits;
use Rennokki\QueryCache\FlushQueryCacheObserver;
use Rennokki\QueryCache\Query\Builder;
/**
* @method static bool flushQueryCache(array $tags = [])
* @method static bool flushQueryCacheWithTag(string $string)
* @method static \Illuminate\Database\Query\Builder|static cacheFor(\DateTime|int|null $time)
* @method static \Illuminate\Database\Query\Builder|static cacheForever()
* @method static \Illuminate\Database\Query\Builder|static dontCache()
* @method static \Illuminate\Database\Query\Builder|static doNotCache()
* @method static \Illuminate\Database\Query\Builder|static cachePrefix(string $prefix)
* @method static \Illuminate\Database\Query\Builder|static cacheTags(array $cacheTags = [])
* @method static \Illuminate\Database\Query\Builder|static appendCacheTags(array $cacheTags = [])
* @method static \Illuminate\Database\Query\Builder|static cacheDriver(string $cacheDriver)
* @method static \Illuminate\Database\Query\Builder|static cacheBaseTags(array $tags = [])
*/
trait QueryCacheable
{
/**
* Boot the trait.
*
* @return void
*/
public static function bootQueryCacheable()
{
/** @var \Illuminate\Database\Eloquent\Model $this */
if (isset(static::$flushCacheOnUpdate) && static::$flushCacheOnUpdate) {
static::observe(
static::getFlushQueryCacheObserver()
);
}
}
/**
* Get the observer class name that will
* observe the changes and will invalidate the cache
* upon database change.
*
* @return string
*/
protected static function getFlushQueryCacheObserver()
{
return FlushQueryCacheObserver::class;
}
/**
* Set the base cache tags that will be present
* on all queries.
*
* @return array
*/
protected function getCacheBaseTags(): array
{
return [
(string) static::class,
];
}
/**
* When invalidating automatically on update, you can specify
* which tags to invalidate.
*
* @param string|null $relation
* @param \Illuminate\Database\Eloquent\Collection|null $pivotedModels
* @return array
*/
public function getCacheTagsToInvalidateOnUpdate($relation = null, $pivotedModels = null): array
{
/** @var \Illuminate\Database\Eloquent\Model $this */
return $this->getCacheBaseTags();
}
/**
* {@inheritdoc}
*/
protected function newBaseQueryBuilder()
{
/** @var \Illuminate\Database\Eloquent\Model $this */
$connection = $this->getConnection();
$builder = new Builder(
$connection,
$connection->getQueryGrammar(),
$connection->getPostProcessor()
);
$builder->dontCache();
if (property_exists($this, 'cacheFor')) {
$builder->cacheFor($this->cacheFor);
}
if (method_exists($this, 'cacheForValue')) {
$builder->cacheFor($this->cacheForValue($builder));
}
if (property_exists($this, 'cacheTags')) {
$builder->cacheTags($this->cacheTags);
}
if (method_exists($this, 'cacheTagsValue')) {
$builder->cacheTags($this->cacheTagsValue($builder));
}
if (property_exists($this, 'cachePrefix')) {
$builder->cachePrefix($this->cachePrefix);
}
if (method_exists($this, 'cachePrefixValue')) {
$builder->cachePrefix($this->cachePrefixValue($builder));
}
if (property_exists($this, 'cacheDriver')) {
$builder->cacheDriver($this->cacheDriver);
}
if (method_exists($this, 'cacheDriverValue')) {
$builder->cacheDriver($this->cacheDriverValue($builder));
}
if (property_exists($this, 'cacheUsePlainKey')) {
$builder->withPlainKey();
}
if (method_exists($this, 'cacheUsePlainKeyValue')) {
$builder->withPlainKey($this->cacheUsePlainKeyValue($builder));
}
return $builder->cacheBaseTags($this->getCacheBaseTags());
}
}