我正在使用Laravel 5.2并希望缓存雄辩的结果,但它不会在缓存中存储空结果(= null)。有没有办法做到这一点?
return Cache::remember("cacheKey_{$id}", 120, function () use ($id) {
return FooModel::where(...)->first();
});
当结果不为空时,缓存正常工作。
答案 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)