CakePHP:控制器/关系

时间:2012-02-08 23:32:13

标签: cakephp

我有2个控制器:“CouponsController”和“CategoriesController”。以下是每个模型:

class Category extends AppModel {
    public $hasMany = array('Coupon' => array('className' => 'Coupon',
                                              'foreignKey' => 'category_id')
    );
}


class Coupon extends AppModel {
    public $belongsTo = array('Category' => array('className' => 'Category',
                                                  'foreignKey' => 'category_id')
    );
}

我想创建链接以查看每个类别中的优惠券。我最终想出的是CouponsController的以下内容(这个例子适用于餐馆):

public function restaurants() {
    $this->set('coupons', $this->Coupon->findAllBycategory_id('1'));
    $this->render("index"); 
}

我有两个问题:

1:有没有更好的方法来显示每个类别的所有帖子(现在,我只是复制上面的“酒店”功能并更改类别ID。我每次都渲染相同的视图)。

2:是否有更好的方式来访问特定类别的优惠券(更多OOP:即:优惠券 - >类别等),而不是我的方式?

1 个答案:

答案 0 :(得分:1)

我会允许restaurants()采用类别变量。如果未设置,则显示所有类别中的所有优惠券。如果设置了类别,则按ID搜索。然后我会链接迭代类别,链接返回到输入变量的同一页面。

<强>控制器

public function restaurants(category_id = null) {
  $this->set('categories', $this->Category->find('all');
  if(isset($category_id)) {
    $this->set('coupons', $this->Coupon->findAllBycategory_id($category_id));
  } else {
    $this->set('coupons', $this->Coupon->find('all'));
  }
  $this->render("index"); 
}

查看

//Some menu somewhere
<ul>
<?php foreach($categories as $category): ?>
  <li><?php $this->Html->link($category['Category']['name'], ('action'=>'restaurants', $category['Category']['id']) ?> </li>
<?php endforeach; ?>   
</ul>

沿着这些方向发展。