mikebronner / laravel-model-caching

Eloquent model-caching made easy.
MIT License
2.26k stars 217 forks source link

Question: How many cache records should be created when using firstOrFail? #201

Closed shawnheide closed 5 years ago

shawnheide commented 5 years ago

Issue

In looking at the cache records in Redis from a single call of firstOrFail I see three records created and am wondering if this is the intended behavior. It's probably just easier to follow if you set a breakpoint in the (get method) of CachedBuilder and go through the stack, but I'll try to summarize what I'm seeing.

So what I end up with are two (almost identical) cache records for the model and one for a collection with one element. Is that how it's supposed to be or am I missing something in understanding all of this? Thanks for your time and help, I really appreciate it.

Environment

Laravel Version: 5.6.39 Laravel Model Caching Package Version: 0.3.6 PHP Version: 7.2.2

Stack Trace

GeneaLabs\LaravelModelCaching\CachedBuilder->get (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:94)
GeneaLabs\LaravelModelCaching\CachedBuilder->first (/var/www/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php:77)
GeneaLabs\LaravelModelCaching\CachedBuilder->GeneaLabs\LaravelModelCaching\{closure} (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:286)
Illuminate\Cache\RedisTaggedCache->rememberForever (/var/www/vendor/laravel/framework/src/Illuminate/Cache/Repository.php:362)
GeneaLabs\LaravelModelCaching\CachedBuilder->retrieveCachedValue (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:288)
GeneaLabs\LaravelModelCaching\CachedBuilder->cachedValue (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:233)
GeneaLabs\LaravelModelCaching\CachedBuilder->first (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:77)
GeneaLabs\LaravelModelCaching\CachedBuilder->find (/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:291)
GeneaLabs\LaravelModelCaching\CachedBuilder->GeneaLabs\LaravelModelCaching\{closure} (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:286)
Illuminate\Cache\RedisTaggedCache->rememberForever (/var/www/vendor/laravel/framework/src/Illuminate/Cache/Repository.php:362)
GeneaLabs\LaravelModelCaching\CachedBuilder->retrieveCachedValue (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:288)
GeneaLabs\LaravelModelCaching\CachedBuilder->cachedValue (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:233)
GeneaLabs\LaravelModelCaching\CachedBuilder->find (/var/www/vendor/genealabs/laravel-model-caching/src/CachedBuilder.php:66)
GeneaLabs\LaravelModelCaching\CachedBuilder->findOrFail (/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:321)
App\TestModel->__call (/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1570)
App\TestModel->findOrFail (/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1582)
Illuminate\Database\Eloquent\Model::__callStatic (/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1582)
Illuminate\Database\Eloquent\Model::findOrFail (/var/www/app/Http/Controllers/TestController.php:17)
...
mikebronner commented 5 years ago

Hi @shawnheide, this sounds like intended behavior. This package caches any queries that Eloquent runs behind the scenes. If Laravel runs multiple queries for ->find(), then it will cache the results of each of those. Sorry for the late reply.