cakePHP afterFind и ценности ассоциации - PullRequest
0 голосов
/ 15 февраля 2012

Я использую обратный вызов cakePHP 2.0 afterFind () для вычисления значений базы данных перед его отображением.

У меня есть три модели - Материалы, Продукты и Котировки.

Каждый продукт имеетматериал и расчеты выполняются в обратном вызове Product afterFind с использованием этой связи, в частности, со строкой:

$results[$key]['Product']['material_cost'] = $results[$key]['Product']['material_mass'] * $val['Material']['cost'];

с $val['Material']['cost'] со ссылкой на связанный материал.

Пока все в порядке.

Далее в моей модели Quote есть обратный вызов afterFind ().Цитата связана с продуктом, а расчеты в модели котировок зависят от вычислений в имеющейся модели Продукта, в частности от той, которая ссылается на материал.

Я могу сослаться на результаты Afterfind модели Product в модели Quote afterFind, просто отлично: $val['Product']['number_tools']

Однако теперь модель Product не может найти связанный материал, и я получаю сообщение об ошибке: Undefinedindex: Material [APP / Model / Product.php, строка 126].
в строке 126 Product.php -

$val['Material']['cost'] 

Как мне обойти эту проблему, это сводит меня с ума!

1 Ответ

0 голосов
/ 16 февраля 2012

Вам нужно загрузить модель для материала.Причина, по которой вы можете получить к нему доступ из Продукта, заключается в том, что он связан отношениями, а ваш рекурсив по умолчанию позволяет модели загружать связанные данные.Таким образом, в методе Quote модель beforeFind перед началом анализа данных загрузите модель материала:

public function afterFind($results) {

    App::uses('Material', 'Model');
    $material = new Material();
    $materials = $material->find(...);

    foreach ($results as $key => $val) {
        // access $materials['Material']['cost']
    }
    return $results;
}
...