diff --git a/src/QueryOrModelCaller.php b/src/QueryOrModelCaller.php new file mode 100644 index 0000000..22db5fe --- /dev/null +++ b/src/QueryOrModelCaller.php @@ -0,0 +1,54 @@ +query = $query; + $this->model = $model; + $this->disableInConfig = $disableInConfig; + } + + /** + * @param $name + * @param $arguments + * + * @return mixed + */ + public function __call($name, $arguments) + { + if ($name == 'all') + $result = call_user_func_array([$this->model, 'all'], $arguments); + else + $result = call_user_func_array([$this->query, $name], $arguments); + + config()->set('laravel-model-caching.disabled', $this->disableInConfig); + + return $result; + } +} diff --git a/src/Traits/ModelCaching.php b/src/Traits/ModelCaching.php index 8cfec59..12215ed 100644 --- a/src/Traits/ModelCaching.php +++ b/src/Traits/ModelCaching.php @@ -1,18 +1,20 @@ isCachable) { return parent::all($columns); } - $class = get_called_class(); - $instance = new $class; $tags = [str_slug(get_called_class())]; $key = $instance->makeCacheKey(); @@ -52,13 +54,16 @@ public function newEloquentBuilder($query) return new CachedBuilder($query); } - public function scopeDisableCache(EloquentBuilder $query) : EloquentBuilder + public function scopeDisableCache(EloquentBuilder $query) : QueryOrModelCaller { + $disabledInConfig = config('laravel-model-caching.disabled'); + if ($this->isCachable()) { + config()->set('laravel-model-caching.disabled', true); $query = $query->disableModelCaching(); } - return $query; + return new QueryOrModelCaller($query, $this, $disabledInConfig); } public function scopeWithCacheCooldownSeconds(