2017-08-14 3 views
0

Ich benutze Laravel 5.2 und möchte eloquente Ergebnisse zwischenspeichern, aber es speichert keine leeren Ergebnisse (= null) im Cache. Gibt es einen Weg, es zu tun?Laravel Cache speichert keinen Nullwert

Wenn das Ergebnis nicht leer ist, funktioniert der Cache ordnungsgemäß.

+0

Was ist der Fehler? – Alfa

Antwort

3

Laravel-Cache erlaubt nicht null Werte im Cache zu speichern, aber Sie können false Werte speichern.

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

So würde ich Ihnen vorschlagen, etwas zu versuchen, wie:

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

Alternativ können Sie davon ausgehen, dass, wenn nicht der Schlüssel ist, wäre es null sein (Kontrolle mit Cache::has() oder isset())

0

Beginnend mit Laravel 5.4 gibt die Methode Cache::has() false zurück, wenn der Wert null or false ist, nicht nur für null wie für frühere Versionen. Um dieses Problem für Version 5.4, aber auch für ältere Versionen mit Nullwert zu beheben, können wir das Ergebnis in einem Array wie diesem speichern: Cache::put(['data' => $variable]) wobei $ Variable null, falsch oder ein beliebiger Wert sein kann.

\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)