Skip to content

Commit d9c0be4

Browse files
committed
Merge branch 'master' into develop
2 parents 4e6aa3e + f68a8f3 commit d9c0be4

File tree

10 files changed

+80
-74
lines changed

10 files changed

+80
-74
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
55
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
66

7+
## [0.2.26] - 16 Feb 2018
8+
### Added
9+
- refactor functionality to trait (thanks @rs-sliske!).
10+
711
## [0.2.25] - 16 Feb 2018
812
### Fixed
913
- readme spelling errors (thanks @fridzema!).

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ composer require genealabs/laravel-model-caching
3232
```
3333

3434
## Configuration
35-
### Optional Custom Cache Store
35+
### Recommended (Optional) Custom Cache Store
3636
If you would like to use a different cache store than the default one used by
3737
your Laravel application, you may do so by setting the `MODEL_CACHE_STORE`
3838
environment variable in your `.env` file to the name of a cache store configured
@@ -49,18 +49,19 @@ mean that the entire cache is cleared each time a model is created, saved,
4949
updated, or deleted.
5050

5151
For ease of maintenance, I would recommend adding a `BaseModel` model that
52-
extends `CachedModel`, from which all your other models are extended. If you
52+
uses `Cachable`, from which all your other models are extended. If you
5353
don't want to do that, simply extend your models directly from `CachedModel`.
5454

5555
Here's an example `BaseModel` class:
5656

5757
```php
5858
<?php namespace App;
5959

60-
use GeneaLabs\LaravelModelCaching\CachedModel;
60+
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
6161

62-
abstract class BaseModel extends CachedModel
62+
abstract class BaseModel
6363
{
64+
use Cachable;
6465
//
6566
}
6667
```

src/CachedModel.php

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

3-
use GeneaLabs\LaravelModelCaching\CachedBuilder as Builder;
43
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
5-
use Illuminate\Cache\CacheManager;
6-
use Illuminate\Cache\TaggableStore;
7-
use Illuminate\Cache\TaggedCache;
8-
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
94
use Illuminate\Database\Eloquent\Model;
10-
use Illuminate\Database\Eloquent\Relations\Relation;
11-
use Illuminate\Support\Collection;
12-
use LogicException;
135

146
abstract class CachedModel extends Model
157
{
168
use Cachable;
17-
18-
public function newEloquentBuilder($query)
19-
{
20-
if (session('genealabs-laravel-model-caching-is-disabled')) {
21-
session()->forget('genealabs-laravel-model-caching-is-disabled');
22-
23-
return new EloquentBuilder($query);
24-
}
25-
26-
return new Builder($query);
27-
}
28-
29-
public static function boot()
30-
{
31-
parent::boot();
32-
33-
$class = get_called_class();
34-
$instance = new $class;
35-
36-
static::created(function () use ($instance) {
37-
$instance->flushCache();
38-
});
39-
40-
static::deleted(function () use ($instance) {
41-
$instance->flushCache();
42-
});
43-
44-
static::saved(function () use ($instance) {
45-
$instance->flushCache();
46-
});
47-
48-
static::updated(function () use ($instance) {
49-
$instance->flushCache();
50-
});
51-
}
52-
53-
public static function all($columns = ['*'])
54-
{
55-
$class = get_called_class();
56-
$instance = new $class;
57-
$tags = [str_slug(get_called_class())];
58-
$key = $instance->makeCacheKey();
59-
60-
return $instance->cache($tags)
61-
->rememberForever($key, function () use ($columns) {
62-
return parent::all($columns);
63-
});
64-
}
659
}

src/Console/Commands/Flush.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Console\Commands;
22

33
use Illuminate\Console\Command;
4-
use GeneaLabs\LaravelModelCaching\CachedModel;
54

65
class Flush extends Command
76
{
@@ -21,7 +20,7 @@ public function handle()
2120

2221
$model = new $option;
2322

24-
if (! $model instanceof CachedModel) {
23+
if (! method_exists($model, 'flushCache')) {
2524
$this->error("'{$option}' is not an instance of CachedModel.");
2625
$this->line("Only CachedModel instances can be flushed.");
2726

src/Traits/Cachable.php

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
use GeneaLabs\LaravelModelCaching\CachedModel;
66
use Illuminate\Cache\TaggableStore;
77
use Illuminate\Database\Query\Builder;
8+
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
9+
use GeneaLabs\LaravelModelCaching\CachedBuilder;
810

911
trait Cachable
1012
{
@@ -39,6 +41,10 @@ public function disableCache()
3941

4042
public function flushCache(array $tags = [])
4143
{
44+
if (count($tags) === 0) {
45+
$tags = $this->makeCacheTags();
46+
}
47+
4248
$this->cache($tags)->flush();
4349
}
4450

@@ -57,7 +63,44 @@ protected function makeCacheKey(
5763

5864
protected function makeCacheTags() : array
5965
{
60-
return (new CacheTags($this->eagerLoad, $this->model))
66+
$tags = (new CacheTags($this->eagerLoad ?? [], $this->model ?? $this))
6167
->make();
68+
69+
return $tags;
70+
}
71+
72+
public static function bootCachable()
73+
{
74+
static::saved(function ($instance) {
75+
$instance->flushCache();
76+
});
77+
}
78+
79+
public static function all($columns = ['*'])
80+
{
81+
if (session('genealabs-laravel-model-caching-is-disabled')) {
82+
return parent::all($columns);
83+
}
84+
85+
$class = get_called_class();
86+
$instance = new $class;
87+
$tags = [str_slug(get_called_class())];
88+
$key = $instance->makeCacheKey();
89+
90+
return $instance->cache($tags)
91+
->rememberForever($key, function () use ($columns) {
92+
return parent::all($columns);
93+
});
94+
}
95+
96+
public function newEloquentBuilder($query)
97+
{
98+
if (session('genealabs-laravel-model-caching-is-disabled')) {
99+
session()->forget('genealabs-laravel-model-caching-is-disabled');
100+
101+
return new EloquentBuilder($query);
102+
}
103+
104+
return new CachedBuilder($query);
62105
}
63106
}

tests/Fixtures/Author.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures;
22

3-
use GeneaLabs\LaravelModelCaching\CachedModel;
3+
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
44
use Illuminate\Database\Eloquent\Builder;
5+
use Illuminate\Database\Eloquent\Model;
56
use Illuminate\Database\Eloquent\Relations\HasMany;
67
use Illuminate\Database\Eloquent\Relations\HasOne;
78

8-
class Author extends CachedModel
9+
class Author extends Model
910
{
11+
use Cachable;
12+
1013
protected $fillable = [
1114
'name',
1215
'email',

tests/Fixtures/Book.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures;
22

3-
use GeneaLabs\LaravelModelCaching\CachedModel;
3+
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
4+
use Illuminate\Database\Eloquent\Model;
45
use Illuminate\Database\Eloquent\Relations\BelongsTo;
56
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
67

7-
class Book extends CachedModel
8+
class Book extends Model
89
{
10+
use Cachable;
11+
912
protected $casts = [
1013
'price' => 'float',
1114
];

tests/Fixtures/Profile.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures;
22

3-
use GeneaLabs\LaravelModelCaching\CachedModel;
4-
use Illuminate\Database\Eloquent\Relations\HasMany;
3+
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
4+
use Illuminate\Database\Eloquent\Model;
55
use Illuminate\Database\Eloquent\Relations\BelongsTo;
6+
use Illuminate\Database\Eloquent\Relations\HasMany;
67

7-
class Profile extends CachedModel
8+
class Profile extends Model
89
{
10+
use Cachable;
11+
912
protected $fillable = [
1013
'first_name',
1114
'last_name',

tests/Fixtures/Publisher.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures;
22

3-
use GeneaLabs\LaravelModelCaching\CachedModel;
3+
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
4+
use Illuminate\Database\Eloquent\Model;
45
use Illuminate\Database\Eloquent\Relations\HasMany;
56

6-
class Publisher extends CachedModel
7+
class Publisher extends Model
78
{
9+
use Cachable;
10+
811
protected $fillable = [
912
'name',
1013
];

tests/Fixtures/Store.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures;
22

3-
use GeneaLabs\LaravelModelCaching\CachedModel;
3+
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
4+
use Illuminate\Database\Eloquent\Model;
45
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
56

6-
class Store extends CachedModel
7+
class Store extends Model
78
{
9+
use Cachable;
10+
811
protected $fillable = [
912
'address',
1013
'name',

0 commit comments

Comments
 (0)