Как использовать метод обратного вызова? - PullRequest
1 голос
/ 04 июня 2011

Я новичок в CakePHP. Я пытаюсь поставить запрос после получения части результата в модели и использовать его при обратном вызове. Но получаю ошибки, когда я пытаюсь получить отладку $ newArray из модели .. В моем контроллере у меня есть это

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;

    }
}

1 Ответ

2 голосов
/ 04 июня 2011

Обратные вызовы автоматически вызываются Cake, вы не вызываете их вручную (в этом суть, иначе они будут обычными методами).Поток:

  • вызовы контроллера Model::find
  • триггеры Cake Model::beforeFind обратный вызов, если имеется
  • Cake находит результаты
  • триггеры CakeModel::afterFind обратный вызов, если имеется, с передачей массива найденных данных
    • обратный вызов должен возвращать данные
  • Контроллер получает данные, возвращаемые Model::afterFind

В руководстве приведены примеры для afterFind .Вы не должны запускать дальнейшие запросы из afterFind, так как это может войти в бесконечный цикл, при котором каждый запрос вызывает больше afterFind обратных вызовов.Я бы также не советовал слишком резко изменять ваши результаты в afterFind, вы должны делать легкий массаж результатов только там, где это необходимо.Из вашего поста я не могу сказать, чего вы пытаетесь достичь, поэтому я не могу дать никаких конкретных подсказок, но вы, вероятно, можете сделать это без afterFind, сформулировав лучший запрос в контроллере.

...