2011-03-19 20 views
1

在我的“Reports”控制器中,它只是一个没有任何实际数据库的虚拟控制器,我试图生成其他模型的分页视图。例如,为了产生“交易”模式的分页视图我做了以下内容:在使用loadModel时递归分页

$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)) 

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

回答

2

有两件事情:首先,即使多个模型名称可以出于某种奇怪的原因而工作,约定是模型名称是单数的,如$this->loadModel('Transaction');。见the manual on naming conventions

其次,忘记recursive并去为Containable行为。坦率地说,我很好奇它为什么不是默认的过程(可能是因为Containable在框架非常成熟时被创建)。马特有a good book解释为什么Containable是好的(下载它,真的,它几乎是强制性的:D)。但是,为了帮助更多的,我会确切地告诉你如何解决您的问题与中可容纳:

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, 
    ) 
); 

执行相同的会员模式。这里 (该$actsAs变量中的AppModel类告诉所有型号使用中可容纳)

<?php 
class AppModel extends Model { 
    var $recursive = -1; 
    var $actsAs = array('Containable'); 
} 
?> 

3)在报告控制器,更改代码:

2)使用此代码创建一个app_model.php文件/app/如下所示: (包含参数是要包含的所有关联模型的数组,只能包含一个关联模型或全部或任何您想要的)。

$this->loadModel('Transaction'); 
$this->paginate = array('Transaction' => array('contain' => array('Item', 'Member')));  
$results = $this->paginate('Transaction'); 

就是这样!

+0

圣sh **。这样一个简单的错误!我已经使用了两年的Cake,并且我无法发现我使用的是复数而不是单数的名称!我昨天为什么没有工作而头痛。 @YOMorales,谢谢你的时间。你真的有一个尖锐的眼睛:)而且我知道Containable,我也试过这之前张贴在这里。我同意你所说的话,那可以包容的是更好的做法。我在使用蛋糕之前就已经打好了v1,很久之前它就变得容易了,我猜旧的习惯会很难:D – Ashok 2011-03-19 06:35:14

+0

很酷!从那时起我一直在使用Cake!与长期使用者交谈是件好事。无论如何,奇怪的是,复数模型名称DO可以用于您提供的示例代码。很奇怪,是的。 – YOMorales 2011-03-19 06:40:18

+0

马特的所有链接似乎最近都被打破。有人知道该电子书的工作链接吗? – 2011-03-21 20:52:27