Laravel缓存不存储空值

时间:2017-08-14 08:10:01

标签: laravel caching laravel-5 eloquent

我正在使用Laravel 5.2并希望缓存雄辩的结果,但它不会在缓存中存储空结果(= null)。有没有办法做到这一点?

return Cache::remember("cacheKey_{$id}", 120, function () use ($id) {
  return FooModel::where(...)->first();
});

当结果不为空时,缓存正常工作。

2 个答案:

答案 0 :(得分:3)

Laravel缓存不允许在缓存中存储null值,但您可以存储false值。

    cache(['key' => null],120)
    var_dump(Cache::has('key')); //prints false
    cache(['key' => false],120)
    var_dump(Cache::has('key')); //prints true

所以我建议你尝试一下:

return Cache::remember("cacheKey_{$id}", 120, function () use ($id) {
  $your_check = FooModel::where(...)->first();
  return is_null($your_check) ? false : $your_check;
});

或者,您可以假设当没有密钥时,它将为空(使用Cache::has()isset()检查)

答案 1 :(得分:0)

从Laravel 5.4开始,如果值为Cache::has(),则方法null or false将返回false,而不仅仅是null与先前版本相同。为了解决版本5.4的问题,但对于具有null值的旧版本,我们可以将结果存储到这样的数组中:Cache::put(['data' => $variable])其中$ variable可以为null,false或任何值。

\Cache::put('key', ['data' => null], 5);
var_dump(\Cache::has('key')); //prints true
var_dump(\Cache::get('key')); //prints array (size=1) 'data' => null

\Cache::put('key2', ['data' => false], 5);
var_dump(\Cache::has('key2')); //prints true
var_dump(\Cache::get('key2')); //prints array (size=1) 'data' => boolean false

\Cache::put('key3', ['data' => 'ok'], 5);
var_dump(\Cache::has('key3')); //prints true
var_dump(\Cache::get('key3')); //prints array (size=1) 'data' => string 'ok' (length=6)