Skip to content

Commit f90b699

Browse files
committed
Add tests, update readme to note that lazy-loaded relationships are not cached
1 parent ff42fa8 commit f90b699

File tree

7 files changed

+129
-4
lines changed

7 files changed

+129
-4
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ for me, and one that would let me cache custom queries, as well as cache model
1717
relationships. This package is an attempt to address those requirements.
1818

1919
## Features
20-
- automatic, self-invalidating relationship (both eager- and lazy-loaded) caching.
20+
- automatic, self-invalidating relationship (only eager-loading) caching.
2121
- automatic, self-invalidating model query caching.
2222
- automatic use of cache tags for cache providers that support them (will
2323
flush entire cache for providers that don't).
@@ -148,6 +148,9 @@ This comes in handy when manually making updates to the database. You could also
148148
trigger this after making updates to the database from sources outside your
149149
Laravel app.
150150

151+
## Planned Features
152+
- [ ] [caching of lazy-loaded relationships, see #127](https://github.com/GeneaLabs/laravel-model-caching/issues/127).
153+
151154
## Summary
152155
**That's all you need to do. All model queries and relationships are now
153156
cached!**

src/CacheKey.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function make(
3939
$key .= $this->getOffsetClause();
4040
$key .= $this->getLimitClause();
4141
$key .= $keyDifferentiator;
42-
42+
dump($key);
4343
return $key;
4444
}
4545

src/CacheTags.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function make() : array
3737
->prepend($this->getTagName())
3838
->values()
3939
->toArray();
40-
40+
// dump($tags);
4141
return $tags;
4242
}
4343

tests/Fixtures/UncachedBook.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ public function publisher() : BelongsTo
2828

2929
public function stores() : BelongsToMany
3030
{
31-
return $this->belongsToMany(UncachedStore::class);
31+
return $this->belongsToMany(UncachedStore::class, "book_store", "book_id", "store_id");
3232
}
3333
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Integration\CachedBuilder;
2+
3+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Author;
4+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Book;
5+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Profile;
6+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Publisher;
7+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Store;
8+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor;
9+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedBook;
10+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedProfile;
11+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher;
12+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore;
13+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Http\Resources\Author as AuthorResource;
14+
use GeneaLabs\LaravelModelCaching\Tests\IntegrationTestCase;
15+
use Illuminate\Foundation\Testing\RefreshDatabase;
16+
use Illuminate\Support\Collection;
17+
18+
class LazyLoadTest extends IntegrationTestCase
19+
{
20+
use RefreshDatabase;
21+
22+
/** @group test */
23+
public function testLazyLoadingRelationshipQuery()
24+
{
25+
$key = sha1('genealabs:laravel-model-caching:testing::memory::genealabslaravelmodelcachingtestsfixturesbook-id_<_5');
26+
$tags = [
27+
'genealabs:laravel-model-caching:testing::memory::genealabslaravelmodelcachingtestsfixturesbook',
28+
];
29+
$book = (new Book)
30+
->first();
31+
32+
dump("start");
33+
$stores = $book->stores;
34+
dump("end");
35+
dd($stores);
36+
$cachedResults = $this
37+
->cache()
38+
->tags($tags)
39+
->get($key)['value'];
40+
$liveResults = (new UncachedBook)
41+
->when(true, function ($query) {
42+
$query->where("id", "<", 5);
43+
})
44+
->get();
45+
46+
$this->assertEquals($liveResults->pluck("id"), $books->pluck("id"));
47+
$this->assertEquals($liveResults->pluck("id"), $cachedResults->pluck("id"));
48+
}
49+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Integration\CachedBuilder;
2+
3+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Author;
4+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Book;
5+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Profile;
6+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Publisher;
7+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Store;
8+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor;
9+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedBook;
10+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedProfile;
11+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher;
12+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore;
13+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Http\Resources\Author as AuthorResource;
14+
use GeneaLabs\LaravelModelCaching\Tests\IntegrationTestCase;
15+
use Illuminate\Foundation\Testing\RefreshDatabase;
16+
use Illuminate\Support\Collection;
17+
18+
class WhenTest extends IntegrationTestCase
19+
{
20+
use RefreshDatabase;
21+
22+
public function testWhenQuery()
23+
{
24+
$key = sha1('genealabs:laravel-model-caching:testing::memory::genealabslaravelmodelcachingtestsfixturesbook-id_<_5');
25+
$tags = [
26+
'genealabs:laravel-model-caching:testing::memory::genealabslaravelmodelcachingtestsfixturesbook',
27+
];
28+
29+
$books = (new Book)
30+
->when(true, function ($query) {
31+
$query->where("id", "<", 5);
32+
})
33+
->get();
34+
$cachedResults = $this
35+
->cache()
36+
->tags($tags)
37+
->get($key)['value'];
38+
$liveResults = (new UncachedBook)
39+
->when(true, function ($query) {
40+
$query->where("id", "<", 5);
41+
})
42+
->get();
43+
44+
$this->assertEquals($liveResults->pluck("id"), $books->pluck("id"));
45+
$this->assertEquals($liveResults->pluck("id"), $cachedResults->pluck("id"));
46+
}
47+
}

tests/Integration/CachedBuilder/WithTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,30 @@ public function testMultiLevelWithQuery()
6262
$this->assertEquals($uncachedAuthor->books()->count(), $author->books()->count());
6363
$this->assertEquals($uncachedAuthor->id, $author->id);
6464
}
65+
66+
public function testWithBelongsToManyRelationshipQuery()
67+
{
68+
$key = sha1('genealabs:laravel-model-caching:testing::memory::genealabslaravelmodelcachingtestsfixturesbook-books.id_=_3-stores-first');
69+
$tags = [
70+
'genealabs:laravel-model-caching:testing::memory::genealabslaravelmodelcachingtestsfixturesbook',
71+
'genealabs:laravel-model-caching:testing::memory::genealabslaravelmodelcachingtestsfixturesstore',
72+
];
73+
74+
$stores = (new Book)
75+
->with("stores")
76+
->find(3)
77+
->stores;
78+
$cachedResults = $this
79+
->cache()
80+
->tags($tags)
81+
->get($key)['value']
82+
->stores;
83+
$liveResults = (new UncachedBook)
84+
->with("stores")
85+
->find(3)
86+
->stores;
87+
88+
$this->assertEquals($liveResults->pluck("id"), $stores->pluck("id"));
89+
$this->assertEquals($liveResults->pluck("id"), $cachedResults->pluck("id"));
90+
}
6591
}

0 commit comments

Comments
 (0)