2011-06-03 4 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::afterFindコールバックをトリガーし、その結果、Model::beforeFindコールバックをトリガするコールコールバックはデータを返すことになっています
  • コントローラは、afterFindin the manualのための例がありますModel::afterFind

によって返されたデータを受け取ります。 afterFindからさらにクエリをトリガすべきではありません。これは無限ループになり、各クエリがより多くのafterFindコールバックをトリガするためです。私はまたafterFindであなたの結果をあまりにも大幅に変更することを提案しないでしょう、必要な場合にのみ軽いマッサージを行うべきです。あなたが達成しようとしていることをあなたの投稿から伝えることはできないので、具体的なヒントはありませんが、コントローラーでより良いクエリを定式化することで、おそらくafterFindを使わずに行うことができます。

関連する問題