Skip to content

Commit 23b44d7

Browse files
author
Henk Koop
committed
make disableCache() work for all()
1 parent cc87d74 commit 23b44d7

File tree

2 files changed

+63
-6
lines changed

2 files changed

+63
-6
lines changed

src/QueryOrModelCaller.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
namespace GeneaLabs\LaravelModelCaching;
4+
5+
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
6+
use Illuminate\Database\Eloquent\Model;
7+
8+
class QueryOrModelCaller
9+
{
10+
/**
11+
* @var CachedBuilder
12+
*/
13+
protected $query;
14+
/**
15+
* @var Model
16+
*/
17+
protected $model;
18+
/**
19+
* @var bool
20+
*/
21+
protected $disableInConfig;
22+
23+
/**
24+
* QueryOrModelCaller constructor.
25+
*
26+
* @param EloquentBuilder $query
27+
* @param Model $model
28+
* @param bool $disableInConfig
29+
*/
30+
public function __construct(EloquentBuilder $query, Model $model, bool $disableInConfig)
31+
{
32+
$this->query = $query;
33+
$this->model = $model;
34+
$this->disableInConfig = $disableInConfig;
35+
}
36+
37+
/**
38+
* @param $name
39+
* @param $arguments
40+
*
41+
* @return mixed
42+
*/
43+
public function __call($name, $arguments)
44+
{
45+
if ($name == 'all')
46+
$result = call_user_func_array([$this->model, 'all'], $arguments);
47+
else
48+
$result = call_user_func_array([$this->query, $name], $arguments);
49+
50+
config()->set('laravel-model-caching.disabled', $this->disableInConfig);
51+
52+
return $result;
53+
}
54+
}

src/Traits/ModelCaching.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Traits;
22

33
use GeneaLabs\LaravelModelCaching\CachedBuilder;
4+
use GeneaLabs\LaravelModelCaching\QueryOrModelCaller;
45
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
56

67
trait ModelCaching
78
{
89
public static function all($columns = ['*'])
910
{
10-
$class = get_called_class();
11-
$instance = new $class;
12-
13-
if (config('laravel-model-caching.disabled') || !$instance->isCachable) {
11+
if (config('laravel-model-caching.disabled')) {
1412
return parent::all($columns);
1513
}
1614

15+
$class = get_called_class();
16+
$instance = new $class;
1717
$tags = [str_slug(get_called_class())];
1818
$key = $instance->makeCacheKey();
1919

@@ -53,13 +53,16 @@ public function newEloquentBuilder($query)
5353
return new CachedBuilder($query);
5454
}
5555

56-
public function scopeDisableCache(EloquentBuilder $query) : EloquentBuilder
56+
public function scopeDisableCache(EloquentBuilder $query) : QueryOrModelCaller
5757
{
58+
$disabledInConfig = config('laravel-model-caching.disabled');
59+
5860
if ($this->isCachable()) {
61+
config()->set('laravel-model-caching.disabled', true);
5962
$query = $query->disableModelCaching();
6063
}
6164

62-
return $query;
65+
return new QueryOrModelCaller($query, $this, $disabledInConfig);
6366
}
6467

6568
public function scopeWithCacheCooldownSeconds(

0 commit comments

Comments
 (0)