在我的symfony2应用程序中,我需要在所有页面的顶部显示一些总计,即“已经注册了200,154,555位用户”。
我不想运行查询来计算每个页面加载的计数。我提出的解决方案是创建一个“变量”实体,它有两列,名称和值。然后我将设置一个在cron上运行的控制台命令,它将使用一个计算所有人行等的查询来更新这些变量实体(例如“totalPeople”)。
这感觉有点沉重......这个问题有更好的解决方案吗?
答案 0 :(得分:1)
您可以设置全局参数并添加服务以重写它们。然后从您的Command中调用该服务。
或者直接设置服务来读/写文件(例如json数组)。
或者设置一个包含存储数据的行的选项表。这不会是一种资源密集型查询。
以下是我用来存储RSS源的信息(解析后)
public function checkCache($data=array(), $path = '')
{
foreach ($data as $service => $feed)
{
$service = strtolower($service);
$service = str_replace(' ', '-', $service);
$path = $path.'web/bundles/citation/cache/rss/' . $service . '.cache';
if ((!file_exists($path) || time() - filemtime($path) > 900) && $cache = fopen($path, 'w'))
{
$rss_contents = $this->getFeed($feed); //fetch feed content & returns array
fwrite($cache, serialize($rss_contents));
fclose($cache);
return $rss_contents;
}
else
{
$cache = fopen($path, 'r');
return unserialize(file_get_contents($path));
fclose($cache);
}
}
}
例如,您可以在后端实现该功能,因此每次管理员登录时都会检查缓存,只有当它太旧时才刷新。虽然我也非常喜欢4AM cron作业解决方案。
答案 1 :(得分:0)
你可以使用教义的分页功能(如果你使用教义)。这将利用查询的“限制”部分(即使使用连接),并将为您提供总行数(通过计数查询)。