我正在尝试为系统编写每周报告。报告的一部分将显示有关未存储在数据库中的翻译者的信息——也就是说,对于每个翻译者,我必须提取他们的数据库记录,运行一些逻辑,对于那些逻辑失败的翻译者,我将它们从数组中删除被传递给视图。
我预计视图中不会留下超过几十条记录,但数据库中只有 1,000 多条。没有办法限制从数据库中提取的数量,因为我使用的标准没有存储在那里。
我正在使用以下查询来提取所有行。但是,除非我添加一个“限制”子句并将其限制为 800 行(我对此进行了试验),否则它实际上不会返回任何结果。如果我调试结果数组,它会出现空白。我打开了调试模式,但根本没有给出任何错误,Cake 日志或 IIS 日志中也没有任何内容。
我尝试引入偏移量和限制并以块的形式循环,但是当我尝试再次将它们组合在一起时遇到了同样的问题。在这个 find 查询之后,内存使用量约为 6MB,PHP 限制设置得更高(我认为是 128MB)。
有任何想法吗?我被难住了,把头发拔了出来!
$translators = $this->Translator->find('all', array(
'conditions' => array(
'OR' => array(
array('Translator.translators_status_id' => 1),
array('Translator.translators_status_id' => 2)
)
),
'fields' => array(
'Translator.id',
'Translator.translators_status_id',
'Translator.first_name',
'Translator.last_name',
'Translator.agency_name',
'NativeLanguage.name',
'Country.printable_name'
),
'joins' => array(
array(
'table' => 'languages',
'alias' => 'NativeLanguage',
'type' => 'INNER',
'conditions' => array(
'Translator.language_id = NativeLanguage.id'
)
),
array(
'table' => 'countries',
'alias' => 'Country',
'type' => 'INNER',
'conditions' => array(
'NativeLanguage.country_id = Country.id'
)
)
)
)
);
编辑: 我登陆的解决方案是一次只拉 500 行。然后在每批 500 个中,我执行逻辑测试并从数组中删除行。最后,我将每个减少的批次缝合在一起。