cakePHP Paginator相关表

时间:2013-04-10 13:32:04

标签: cakephp paginator

关于Paginator的新手问题。 我有一个带桌子的DB;国家,地区和财产[以及更多表格] 现在,当我查看区域以显示按地区排序的属性时:例如domain.com/regions/view/33,Paginator计算并显示与区域相关的信息[共60个区域],我想让Paginator显示/计算区域33中的属性数量[3个属性],如何完成这个?

这是我在RegionsController.php中的代码

public function index() {
    $this->Region->recursive = 0;
    $this->paginate = array('limit' => 10,'order' => 'Region.id ASC');
    $this->set('regions', $this->paginate());
}

public function view($id = null) {
    if (!$this->Region->exists($id)) {
        throw new NotFoundException(__('Invalid region'));
    }
    $options = array('conditions' => array('Region.' .$this->Region->primaryKey => $id));
    $this->set('region', $this->Region->find('first', $options));
    $this->paginate = array('limit' => 10,'order' => 'Region.id ASC');
    $this->set('regions', $this->paginate());
}

这是在我的view.ctp中显示Paginator的代码

<br />
<div class="regions view">
<b><center><?php echo nl2br(h($region['Region']['titletag'])); ?></center></b>
<div class="paging">
<?php
    echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled'));
    echo $this->Paginator->numbers(array('separator' => ''));
    echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled'));
?>
</div>


这是Region.php模型中的代码。

class Region extends AppModel {

/**
 * Display field
*
* @var string
*/
public $displayField = 'regionname';


/**
* belongsTo associations
*
* @var array
*/
public $belongsTo = array(
    'Country' => array(
        'className' => 'Country',
        'foreignKey' => 'country_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

/**
* hasMany associations
*
* @var array
*/
public $hasMany = array(
    'Property' => array(
        'className' => 'Property',
        'foreignKey' => 'region_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

使用CakePHP's counterCache保留每个区域的属性数的常量计数。这很容易,CakePHP会为你做好所有的工作。

然后,你在regions表中只有一个“property_count”字段,瞧 - 你可以按它排序,过滤它等等等。

每次添加属性或删除属性时,CakePHP都会自动为您更新计数。