我正在使用CakePHP 2.1.3。我遇到了循环从find('all')
返回的大量数组数据的性能问题。我想逐行检索查询结果,以消除这种昂贵的数组处理。我不希望从find()
或query()
返回数组的结果集。我想要做的就像下面这样:
$db = $this->Model->getDataSource();
$sql = 'SELECT * FROM my_table';
if($result = $db->execute($sql){
$db->resultSet($result);
while($row = $db->fetchResult()){
// do something with $row
}
}
但是,我不想写原始查询。是否有任何Cake函数只是根据关联集构建查询并执行它而不返回结果集?
我目前正在控制器中实现上述脚本。我的模型没有关联,因此我不需要使用recursive = -1
。它是为了CSV导出而获取的整个表格。
Cake find()
有一个内部数组处理,返回的结果集必须再次显式循环。我希望通过避免两次大数据的数组处理来优化代码。
答案 0 :(得分:0)
首先请确保您只获取您真正需要的数据。理想情况下,您可以使用$ this-> YourModel-> recursive = -1获得所需的一切 由于许多连接数据,通常会出现性能问题。
当你检查过这个时,我认为循环是最好的解决方案,你可以通过一个条件来获取块中所需的数据。虽然我不确定这是否会对你有所帮助。
为什么要浏览整张桌子?你做了一些维护,例如填写新字段或更新计数器?也许你可以通过尝试获取整个表来更好地实现目标。