带有大数据库和分页的Cakephp查询
我正在使用cakephp和Mysql开发一个商店系统,其中注册了我销售的所有产品,该系统运行良好,直到我开始进行一些测试,我已经引入了30000多个产品注册,从那时起,我无法搜索我的产品,因为我出现了以下错误: 致命错误:允许的内存大小134217728字节已用尽,尝试分配32字节 根据我的研究,如果发现这与记忆有关,我可以增加记忆,但我也意识到这将是一个动量解决方案。 我看到控制器产品中调用的函数如下: 从这里我看到这可能是个问题,因为它获取了所有的产品 所以我需要的帮助是如何改进这个,什么是最好的方法。在我的研究中,我期望得到的一个解决方案可能是有这个查询,但在我不知道是否可能的时候,会得到10个 提前谢谢。带有大数据库和分页的Cakephp查询,cakephp,Cakephp,我正在使用cakephp和Mysql开发一个商店系统,其中注册了我销售的所有产品,该系统运行良好,直到我开始进行一些测试,我已经引入了30000多个产品注册,从那时起,我无法搜索我的产品,因为我出现了以下错误: 致命错误:允许的内存大小134217728字节已用尽,尝试分配32字节 根据我的研究,如果发现这与记忆有关,我可以增加记忆,但我也意识到这将是一个动量解决方案。 我看到控制器产品中调用的函数如下: 从这里我看到这可能是个问题,因为它获取了所有的产品 所以我需要的帮助是如何改进这个,什么是
PS删除最后两行 您正在进行分页调用,这是您想要的,但随后将其丢弃并获取所有记录。当你有很多数据时,这是相当昂贵的
public function search() {
$this->Product->recursive = 0;
$this->set('products', $this->paginate());
}
拆下最后两行 您正在进行分页调用,这是您想要的,但随后将其丢弃并获取所有记录。当你有很多数据时,这是相当昂贵的
public function search() {
$this->Product->recursive = 0;
$this->set('products', $this->paginate());
}
如果您使用的是CakePHP版本2,那么这是使用paginator的正确方法,您还可以使用10、20、30等限制每页的数据,这样就不能一次加载所有数据
public function search() {
$this->Paginator->settings = array(
'limit' => 10,
'recursive' => 0
);
$products = $this->Paginator->paginate('Product');
$this->set(compact('products'));
}
如果您使用的是CakePHP版本2,那么这是使用paginator的正确方法,您还可以使用10、20、30等限制每页的数据,这样就不能一次加载所有数据
public function search() {
$this->Paginator->settings = array(
'limit' => 10,
'recursive' => 0
);
$products = $this->Paginator->paginate('Product');
$this->set(compact('products'));
}
谢谢你的反馈,这是一个解决方案,但它并不完整,它只向我显示了20条限制在10以内的记录。您还需要将分页添加到视图中:echo$this->Paginator->numbers;谢谢你的反馈,这是一个解决方案,但它并不完整,它只向我显示了20条限制在10以内的记录。您还需要将分页添加到视图中:echo$this->Paginator->numbers;