私はキャッシュに入れておき、データベースにあるユーザのリストをキャッシュから取得しようとしています。エンティティがキャッシュから取得されたときに関連するDoctrine2エンティティを取得する
public function listAction()
{
$cache = $this->get('cache.app');
if ($cache->hasItem('users')) {
$item = $cache->getItem('users');
$users = $item->get();
} else {
$item = $cache->getItem('users');
$em = $this->getDoctrine()->getManager();
$users = $em->getRepository(User::class)->findAll();
$item->set($users);
$cache->save($item);
}
$user = $users[0];
dump($user->getArticles());die();
}
私は(リストがキャッシュされていない)ページを開く初めて私は人口のコレクションオブジェクトを取得し、それ以降のユーザーのリストがキャッシュから取得されたとき、:
私はこれを持っていますコレクションが空であり、アイテムを読み込む方法がわかりません。
私はDoctrineのドキュメントを見てみましたが、何も見つかりませんでした。私はDoctrineをかなり新しくしています。
PS。私はいつもそれらを必要としないので、記事を熱心なものとしてマークしたくありません。
あなたのキャッシュシステムがどのように機能するかを説明できますか?それは '' serialize() ''と '' unserialize() ''を行いますか? –
私は確信して...私はsymfonyによって提供キャッシュを使用しています... 'キャッシュ本当にないんだけど: アプリは: "Redisの:// localhost" を ' – JohnDoe
ある default_redis_providerをcache.adapter.redis非常に一般的なキャッシングシステムなので、デフォルトではこの種のものはサポートされません。あなたの最善の選択肢は、Doctrineのような特定のキャッシングシステムを自分の第2レベルのキャッシュとして使うことだと思います。 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/second-level-cache.htmlを参照してください。別のオプションは、 '$ em-> refresh($ user)'すべてのアイテムですしかし、それはキャッシングの目的を破るものです。 –