結果のキャッシュを設定しようとしているリポジトリがあります。これを行う方法については、オンラインで 1 つの例しか見つけることができませんでした...しかし、リポジトリの 1 つに例を実装すると、エラーが発生します。キャッシュに APC を使用しており、クエリ キャッシュを有効にして config.yml ファイルで APC を使用しています。APC に 512M を割り当てましたが、現在 50M しか使用していません (このうち 23M は、この単一の失敗したキャッシュ エントリ用です)。
私が持っているリポジトリコードは次のとおりです。
class AchievementRepository extends EntityRepository
{
function findAchievementsByCategory($categoryObj)
{
$em=$this->getEntityManager()->createQuery("SELECT a FROM FTWGuildBundle:Achievement a where a.category=:category order by a.title")
->setParameter('category',$categoryObj);
$em->useResultCache(true,3600,'findAchievementsByCategory');
$result=$em->getResult();
return $result;
}
}
そして、これが実行されると、次のエラーが発生します
Notice: apc_store() [<a href='function.apc-store'>function.apc-store</a>]: "type" returned as member variable from __sleep() but does not exist in /data/www/ftw2/Symfony/vendor/doctrine-common/lib/Doctrine/Common/Cache/ApcCache.php line 80
apc.php ファイルを調べて何がキャッシュされているかを確認すると、ユーザー キャッシュ セクションにキャッシュ エントリがあり、保存されている値は次のとおりです。
Fatal error: Nesting level too deep - recursive dependency? in /data/www/localhost/apc.php on line 1000
どこが間違っているかについて、誰かが私に指示を与えることができますか?
このエンティティには、ManyToOne の列がいくつかあります。これを機能させるには、このクエリで遅延読み込みを無効にする必要がありますか? もしそうなら...どうやって?編集: ,fetch="EAGER" を ManyToOne マッピングに追加して熱心な読み込みを有効にしました...リンゴはありません:(
編集 #2:回答- ワーキング クラスのコード (エンティティ クラス (Achievement) のすべてのプロパティが保護されていることに注意してください)
class AchievementRepository extends EntityRepository
{
function findAchievementsByCategory($categoryObj)
{
$em=$this->getEntityManager()->createQuery("SELECT a FROM FTWGuildBundle:Achievement a where a.category=:category order by a.title")
->setParameter('category',$categoryObj);
$em->useResultCache(true,3600,'findAchievementsByCategory');
$result=$em->getArrayResult();
return $result;
}
}