ページネーションの結果をキャッシュさせたいです。
下記のようにキャッシュが存在すればそれを使用、なければ新しく書き込みをしています。
1回目の実行で確かに書き込まれ、キャッシュファイルが作成されています。
中身もちゃんとデータが記述されていました。
ですが、2回目の実行でCache::read($cache_key, '30minute')
した後の返り値が空です。
なぜ空になってしまうのでしょうか。
ページネーションを使った時のキャッシュの仕方がいまいちわからず困っています。
ご教授いただけますと幸いです。
PHP
1// ページネーションの設定 2public $paginate = [ 3 'limit' => 40 4]; 5 6------------------------------------------------------------------------------------------ 7// 以下index()アクション内 8 9// キャッシュキー設定 10$cache_key = ''; 11 12// 固定の条件 13$query = $this->Posts->find() 14 ->where(['id IN' => [1, 3, 5, 7]]); 15 16// キャッシュキーとページネーションの設定にページ数設定 17if (!empty($this->request->query['page'])) { 18 $cache_key .= 'page' . $this->request->query['page']; 19 $this->paginate['page'] = $this->request->query['page']; 20} 21 22// 他にも色々な条件設定し、$cache_keyに追記していっています 23if (!empty($this->request->query['sort'])) { 24 $cache_key .= 'sort' . $this->request->query['sort']; 25 $query->where(['id' => 'DESC']); 26} 27 28// キャッシュの読み込み 29$data = Cache::read($cache_key, '30minute'); 30 31// キャッシュが無ければ新しく書き込み 32if ($data === false) { 33 $data = $this->paginate($query); 34 Cache::write($cache_key, $data, '30minute'); 35} 36 37// ビューへセット 38$this->set(compact('data'));
php
1// この時のCache::read($cache_key, '30minute')の返り値 2 3object(Cake\ORM\ResultSet) { 4 'items' => [] 5}
キャッシュファイルにはjson形式?でデータの配列が記述されている状態です。
追記
上記のように、readしたらからですが、キャッシュファイルには下記のようにクエリの結果が記述されています。
ですが、readすると空になってしまいます。
ページネーションを使ったキャッシュの場合このようになり、普通にfindした結果のキャッシュは読み出すことができます。
json
1"Cake\ORM\ResultSet":313912:{O:13:"SplFixedArray":40:{i:0;O:15:"Cake\ORM\Entity":11:{s:14:"^@*^@_properties";a:18:{s:2:"id";i:355470;s・・・・・
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/14 08:33
2018/03/14 08:35