2012-02-08 10 views
0

私はコントローラが2つあります: "CouponsController"と "CategoriesController"。それぞれのモデルは次のとおりです。CakePHP:コントローラ/リレーションシップ

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(この例では、レストランのためである)のために、以下のたを考え出すことになった:

1:私は2つの質問がある

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

は投稿のすべてを表示するための良い方法はあります(今は "ホテル"のための上記の関数をコピーして、カテゴリIDを変更するだけです)、毎回同じビューをレンダリングします。

2:私はそれをやっているよりも、特定のカテゴリ(より多くのOOP:すなわち:クーポン - >カテゴリなど)のクーポンにアクセスする良い方法はありますか?

答えて

1

レストラン()がカテゴリ変数を取ることを許可します。何も設定されていない場合は、すべてのカテゴリにすべてのクーポンが表示されます。カテゴリが設定されている場合は、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> 

これらの線に沿って何か。