从另一个不相关的模型访问模型需要很长时间

时间:2015-08-04 12:55:21

标签: php cakephp-3.0

我在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,就会出现此问题。

我的问题是 - 为什么这会减慢我的执行速度,如何阻止它?我几乎要求使用此表中的数据进行操作,因此我正在寻找一种加速它的方法。

0 个答案:

没有答案