创建树时发生致命错误

问题描述:

我以前没有给出有关问题的良好信息。我的问题是,在创建蛋糕php中的下拉树时.Cake PHP抛出此错误。创建树时发生致命错误

Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 429982192 bytes) in /home/isteam/public_html/upms/app/controllers/tests_controller.php on line 85 

我试图通过php inin函数增加运行时间的限制,但没有成功。

ini_set('memory_limit','2000M'); 

我的代码表的结构是这样的

|id|parent_id|cat_name| 

我的代码如下

function admin_takecat(){ 
$this->layout=false; 
$this->render(false); 
Configure::write('debug',2); 
App::import('Model','Category'); 
$this->cats=new Category(); 
$firstlevel=$this->cats->find('list',array('fields'=>array('Category.id','Category.cat_name'),'conditions'=>array('Category.parent_id'=>0,'department_id'=>9))); 

$dropbox='<select>'; 
foreach($firstlevel as $id=>$val){ 
    $dropbox.='<option value='.$id.'>'.$val.'</option>'; 
    $count=$this->cats->find('count',array('conditions'=>array('Category.parent_id'=>0,'Category.department_id'=>9,'Category.parent_id'=>$id))); 
    if($count>0){ 
    $dropbox=$this->_recursive($id,$dropbox,1); 

    } 

} 
$dropbox.='</select>'; 
echo $dropbox; 



} 
    function _recursive($catid,$dropbox,$level){ 



    App::import('Model','Category'); 
$this->cats=new Category(); 
$listcats=$this->cats->find('list',array('fields'=>array('Category.id','Category.cat_name'),'conditions'=>array('Category.parent_id'=>0,'Category.department_id'=>9,'Category.parent_id'=>$catid))); 
$mark=''; 
for($i=1;$i<=1;$i++){ 
    $mark.='-'; 

} 

foreach($listcats as $id=>$val){ 
    $dropbox.='<option value='.$id.'>'.$mark.$val.'</option>'; 
    $count=$this->cats->find('count',array('conditions'=>array('Category.parent_id'=>0,'Category.department_id'=>9,'Category.parent_id'=>$id))); 
    if($count>0){ 
    $dropbox.=$this->_recursive($id,$dropbox,$level+1); 

    } 


} 


return $dropbox; 


} 

请建议我该怎么do..Or这样做的任何其他方式..

+0

Cake有一个[Tree行为](http://book.cakephp.org/1.3/view/1339/Tree)内置;可能值得一看。 – Ross

错误消息很明显:您正在获取大量数据,因此应用程序内存不足。并且简单地增加可用内存的数量是而不是修复它是一个非常草率的解决方法,它将使用更严格配置的内存设置来中断下一台服务器上的应用程序。

由于Ross已经建议检查TreeBehavior或修复您的代码,以便在查找中返回相关模型记录和字段的limiting the recursive level以下的数据。

此外,你应该真的按照CakePHP coding standards,因为你的代码是可怕的和令人困惑的阅读。我不会接受这段代码,不是作为开发人员,而不是客户端。

您应该访问数据through model associations而不是使用loadModel()将每个模型加载到控制器中。

对于dropbox有HtmlHelper,具体是HtmlHelper :: input()和HtmlHelper :: select()。