Skip to content

Commit 2e8b2d0

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

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
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: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
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
@@ -53,13 +54,16 @@ public function newEloquentBuilder($query)
5354
return new CachedBuilder($query);
5455
}
5556

56-
public function scopeDisableCache(EloquentBuilder $query) : EloquentBuilder
57+
public function scopeDisableCache(EloquentBuilder $query) : QueryOrModelCaller
5758
{
59+
$disabledInConfig = config('laravel-model-caching.disabled');
60+
5861
if ($this->isCachable()) {
62+
config()->set('laravel-model-caching.disabled', true);
5963
$query = $query->disableModelCaching();
6064
}
6165

62-
return $query;
66+
return new QueryOrModelCaller($query, $this, $disabledInConfig);
6367
}
6468

6569
public function scopeWithCacheCooldownSeconds(

0 commit comments

Comments
 (0)