Две вещи: во-первых, даже когда множественные имена моделей могут работать по какой-то странной причине, существует соглашение, что имена моделей являются единичными, как $this->loadModel('Transaction');
. См. руководство по соглашениям об именах .
Во-вторых, забудьте о recursive
и продолжайте поведение Containable
. Честно говоря, это настолько полезно, что мне интересно, почему это не процесс по умолчанию (возможно, потому что Containable был создан, когда среда была очень зрелой). У Мэтта есть хорошая книга , объясняющая, почему Containable хорош (загрузите его, действительно, это почти обязательно: D). Но, чтобы помочь еще больше, я расскажу вам, как именно вы решаете свою проблему с помощьюableable:
1) Определите ассоциации в моделях, например:
В модели транзакции:
var $belongsTo = array(
'Item' => array(
'className' => 'Item',
'foreignKey' => 'item_id',
)
);
В модели изделия:
var $hasMany = array(
'Transaction' => array(
'className' => 'Transaction',
'foreignKey' => 'item_id',
'dependent' => true,
'exclusive' => true,
)
);
Сделайте то же самое для модели Member.
2) Создайте файл app_model.php
в /app/
с этим кодом:
(Переменная $actsAs
здесь в классе AppModel указывает всем моделям использовать Containable)
<?php
class AppModel extends Model {
var $recursive = -1;
var $actsAs = array('Containable');
}
?>
3) В контроллере отчетов измените код на что-то вроде этого:
(Параметр contains - это массив всех связанных моделей, которые вы хотите включить. Вы можете включить только одну ассоциированную модель, или все, или что вы хотите).
$this->loadModel('Transaction');
$this->paginate = array('Transaction' => array('contain' => array('Item', 'Member')));
$results = $this->paginate('Transaction');
И это все!