我在CakePHP 3.0表中有一个查询,并且应用了formatResults()
方法。
为了执行此计算,需要从不同数据库(货币)中的表格中获取数据。
我目前正在使用此代码收集数据并将其传递给函数:
$currencies = TableRegistry::get('Currencies');
$currencyValues = $currencies
->findByCurrno($options['currency'])
->cache('currency'.$options['currency']);
$currencyValues = $currencyValues->first()->toArray()
$query->formatResults(function ($results) use ($currencyValues) {
return $results->map(function($row) use ($currencyValues) {
$row['converted_earnings'] = $row['earned'] / $currencyValues['cur'.$row['currency']];
$row['converted_advances'] = $row['advances'] / $currencyValues['cur'.$row['currency']];
return $row;
});
});
问题是,这段代码似乎需要很长时间才能执行,即使它只是遍历几百行数据。
进一步调查显示,如果我不从“货币”中收集数据,表,而是将$currencyValues
声明为具有固定数字的数组,代码需要花费整整一秒来执行。
通过评论部分代码,我将此视为问题的原因:
$currencyValues = $currencies
->findByCurrno($options['currency'])
->cache('currency'.$options['currency']);
如果我删除了这部分代码,那么一切都会快速运行,一旦我将其添加(即使我不使用它返回的数据并使用静态数组),页面加载时间也会更长。应该注意的是,无论我是否使用->cache()
方法,并且查询本身报告在sql转储中需要0-1ms,就会出现此问题。
我的问题是 - 为什么这会减慢我的执行速度,如何阻止它?我几乎要求使用此表中的数据进行操作,因此我正在寻找一种加速它的方法。