我有一个存储库,我正在尝试设置结果缓存。我只能在网上找到一个如何执行此操作的示例......但是当我在我的一个存储库中实现该示例时,我收到了一个错误。我正在使用 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:回答- 工作类代码(注意,实体类(成就)的所有属性都已更改为受保护)
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;
}
}