2011-06-03 60 views
1

我是cakephp的新手。我試圖在獲取模型中的結果部分並在回調中使用它後進行查詢。但是,得到錯誤,當我嘗試從模型得到$ newArray的調試。在我的控制器我有這個cakephp如何使用回撥方法

function index($var = null){ 


      if (empty($this->data)) { 




      } 
      else { 


          $results = array(); 

          $getRecords = $this->Model->find('all'); 
           $results = $this->Model->afterFind($getRecords); 
           debug($this->newArray); 

      } 
    } 

在我的模型我有這個

class Model extends AppModel { 
function afterFind($getRecords){ 
    $newArray = array();  
    $query_string = $getRecords['Record']['column1']" ; 
    $results = $this->Model->query($query_string); 
     foreach($results as $result){ 


     //do something and add to $newArray 

     } 
     return $newArray; 

    } 
} 

回答

2

回調被蛋糕自動調用,你不會用手叫他們(這是關鍵,否則他們會是普通的方法)。流量是:

  • 控制器調用Model::find
  • 蛋糕觸發器Model::beforeFind回調,如果存在的話
  • 蛋糕發現導致
  • 蛋糕觸發Model::afterFind回調如果存在的話,傳遞發現數據
    • 的陣列該回調應該返回數據
  • 控制器接收由Model::afterFind

返回的數據存在用於afterFindin the manual例子。您不應該觸發afterFind的更多查詢,因爲這可能會陷入無限循環,每個查詢都會觸發更多afterFind回調。我也不會建議在afterFind中大幅改變你的結果,你應該只在必要的時候輕鬆按摩結果。我無法從你的文章中發現你想要達到的目標,所以我不能給出任何具體的提示,但是你可以在沒有afterFind的情況下通過在控制器中制定一個更好的查詢來做到這一點。