是否有任何CakePHP函数可以在不返回结果集的情况下构建和执行查询

时间:2015-04-26 13:10:07

标签: php mysql cakephp fetch cakephp-2.1

我正在使用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()有一个内部数组处理,返回的结果集必须再次显式循环。我希望通过避免两次大数据的数组处理来优化代码。

相关问题:https://github.com/cakephp/cakephp/issues/6426

1 个答案:

答案 0 :(得分:0)

首先请确保您只获取您真正需要的数据。理想情况下,您可以使用$ this-> YourModel-> recursive = -1获得所需的一切 由于许多连接数据,通常会出现性能问题。

当你检查过这个时,我认为循环是最好的解决方案,你可以通过一个条件来获取块中所需的数据。虽然我不确定这是否会对你有所帮助。

为什么要浏览整张桌子?你做了一些维护,例如填写新字段或更新计数器?也许你可以通过尝试获取整个表来更好地实现目标。