Cakephp 使用loadModel时使用递归分页

Cakephp 使用loadModel时使用递归分页,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,在我的“Reports”控制器中,它只是一个没有任何实际数据库的虚拟控制器,我试图生成其他模型的分页视图。例如,要生成“事务”模型的分页视图,我将执行以下操作: $this->loadModel('Transactions'); $this->Transactions->bindModel(array('belongsTo'=>array('Item'=>array('className'=>'Item'),'Member'=>array('classN

在我的“Reports”控制器中,它只是一个没有任何实际数据库的虚拟控制器,我试图生成其他模型的分页视图。例如,要生成“事务”模型的分页视图,我将执行以下操作:

$this->loadModel('Transactions');
$this->Transactions->bindModel(array('belongsTo'=>array('Item'=>array('className'=>'Item'),'Member'=>array('className'=>'Member'))));
$results = $this->paginate('Transactions',null,array('recursive'=>1));
但这并没有提供来自项目和成员的相关数据。如果我做一个

$this->Transactions->find('all',array('recursive'=>1))

我得到了相关的数据,但没有分页。如何获得包含关联数据的分页视图

两件事:第一,即使由于某种奇怪的原因,复数模型名也可以工作,但惯例是模型名是单数的,比如
$this->loadModel('Transaction')。看

第二,忘记递归
,选择可包含的行为。坦白地说,它非常有用,我想知道为什么它不是默认的过程(可能是因为Containable是在框架非常成熟的时候创建的)。Matt解释了为什么Containeable是好的(下载它,真的,它几乎是强制性的:D)。但为了提供更多帮助,我将确切地告诉您如何使用containable解决您的问题:

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,
    )
);
对成员模型执行相同的操作

2) 使用以下代码在
/app/
中创建
app\u model.php
文件: (AppModel类中的
$actsAs
变量告诉所有模型使用Containable)


就这样

天哪**。这么简单的错误!我用蛋糕已经两年了,我没发现我用复数代替了单数作为模特的名字!!从昨天开始,我一直在想为什么它不起作用@尤莫拉莱斯,谢谢你抽出时间。你真的很有眼光:)我知道Containable,我在这里发布之前也试过。我同意你说的,可控制是更好的做法。我一直在使用cake,直到它达到v1,在它变得可控制之前很久,我想旧习惯很难改变:DCool!从那以后我也一直在用蛋糕!与长期用户交谈是件好事。不管怎样,奇怪的是,复数模型名确实适用于您给出的示例代码。奇怪,是的。马特的所有链接最近似乎都断了。有人知道那本电子书的工作链接吗?这里有一个新链接:
<?php
class AppModel extends Model {
    var $recursive = -1;
    var $actsAs = array('Containable');
}
?>
$this->loadModel('Transaction');
$this->paginate = array('Transaction' => array('contain' => array('Item', 'Member')));      
$results = $this->paginate('Transaction');