带有大数据库和分页的Cakephp查询

带有大数据库和分页的Cakephp查询,cakephp,Cakephp,我正在使用cakephp和Mysql开发一个商店系统,其中注册了我销售的所有产品,该系统运行良好,直到我开始进行一些测试,我已经引入了30000多个产品注册,从那时起,我无法搜索我的产品,因为我出现了以下错误: 致命错误:允许的内存大小134217728字节已用尽,尝试分配32字节 根据我的研究,如果发现这与记忆有关,我可以增加记忆,但我也意识到这将是一个动量解决方案。 我看到控制器产品中调用的函数如下: 从这里我看到这可能是个问题,因为它获取了所有的产品 所以我需要的帮助是如何改进这个,什么是

我正在使用cakephp和Mysql开发一个商店系统,其中注册了我销售的所有产品,该系统运行良好,直到我开始进行一些测试,我已经引入了30000多个产品注册,从那时起,我无法搜索我的产品,因为我出现了以下错误:

致命错误:允许的内存大小134217728字节已用尽,尝试分配32字节

根据我的研究,如果发现这与记忆有关,我可以增加记忆,但我也意识到这将是一个动量解决方案。 我看到控制器产品中调用的函数如下:

从这里我看到这可能是个问题,因为它获取了所有的产品

所以我需要的帮助是如何改进这个,什么是最好的方法。在我的研究中,我期望得到的一个解决方案可能是有这个查询,但在我不知道是否可能的时候,会得到10个

提前谢谢。
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;