我正在尝试为系统编写每周报告。报告的一部分将显示有关未存储在数据库中的转换器的信息 - 也就是说,对于每个转换器,我必须提取其DB记录,运行一些逻辑,对于那些逻辑失败的转换器,我将它们从数组中删除传递给视图。
我预计视图中不会有超过十几条记录,但数据库中只有超过1,000条记录。没有办法限制从数据库中取出的数量,因为我使用的标准没有存储在那里。
我正在使用以下查询来提取所有行。但是,除非我添加一个'limit'子句并将其限制为800行(我试过这个),它实际上不会返回任何结果。如果我调试结果数组,它会出现空白。我打开了调试模式,但根本没有给出任何错误,并且Cake日志或IIS日志中也没有任何内容。
我尝试在块中引入偏移量和限制以及循环但是当我尝试将它们全部组合在一起时,我遇到了同样的问题。在查找查询之后,内存使用量大约为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个,我执行逻辑测试并从数组中删除行。最后,我将每个减少的批次缝合在一起。
答案 0 :(得分:0)
我猜你刚刚耗尽内存。 这里有(或者是?)非常有趣的讨论: http://www.mail-archive.com/cake-php@googlegroups.com/msg50610.html
答案 1 :(得分:0)
毕竟这与记忆无关。在CakePHP 2.2(可能更高)中,如果您的数据库排序规则未设置为UTF-8,则debug()
函数不能很好地与某些UTF-8字符一起使用。在包含这些字符的任何值的数组上运行debug()
最终会得到调试器的“空白”输出。我假设在上面的例子中,直到800 +第n行,我才遇到任何有问题的字符。
现在我们的DB排序规则设置为UTF-8,并且CakePHP设置为以UTF-8连接到MySQL,这个问题已经消失。