我在CakePHP应用程序的database.php文件中有以下数据库配置:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'database',
'prefix' => '',
);
除一个队列shell脚本外,一切正常。脚本循环并等待命令运行(例如更新某些报告)。经过一段时间1-2天的数据库数据正在发生变化,但脚本仍然会“看到”旧数据,并且命令结果是错误的。如果我重新启动shell脚本,结果就可以了......几天。
我必须提到我之前在脚本中“丢失了数据库连接”问题,我已经通过每10-15分钟运行来解决它:
$user = $this->User->find('first');
现在我很担心这会使连接以某种方式持续...
如何重置数据库连接?
编辑: 我只是重构代码来检查我是否可以在模型上将$ cacheQueries设置为false。但是在代码的一些部分我直接使用ConnectionManager,然后才有“缓存”问题。如果我从Model->查询数据库,查找结果是可以的。我需要在很少的地方直接查询性能原因......
$query = "SELECT COUNT(1) as result
FROM
......
";
$db = ConnectionManager::getDataSource('default');
$result = $db->query($query);
答案 0 :(得分:1)
尝试将这两个模型属性设置为false:
答案 1 :(得分:1)
@burzum提到的属性$ cacheQueries似乎没有在任何蛋糕模型方法中使用。
但我在DboSource的来源中找到了另一个有趣的事实。
您需要使用DboSource :: query()方法的第二个参数来关闭缓存。如果你想为DboSource :: fetchAll()方法提供额外的参数,那么第三个。
虽然这样可以解决您的问题,但您应该使用CakePHP提供的Model :: find()方法编写查询。
如果严重影响您的表现,则不应使用它们。
func0der