2017-08-14 7 views
0

Laravel 5.2を使用していて、雄弁な結果をキャッシュしたいが、空の結果(= null)をキャッシュに保存しない。それを行う方法はありますか?Laravelキャッシュにnull値が格納されない

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

結果が空でない場合、キャッシュは正常に動作しています。

+0

エラーは何ですか? – Alfa

答えて

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 

だから私のようなものしようとするあなたを示唆している:あなたは、それがnullになり、キーがない場合と仮定することができますまた

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()に確認してください)
0

Laravel 5.4より、のメソッドは、値が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) 
関連する問題