2012-07-26 51 views
0

我正在CakePHP中構建一個站點。我有兩個表,「類別」和「公司」和第三個是加入他們所謂的「companies_categories」:CakePHP 2.0 - 基於關係表的訂單

companies_categories 
`id` int(10) NOT NULL AUTO_INCREMENT, 
`company_id` int(10) NOT NULL, 
`category_id` int(10) NOT NULL, 

我想基於公司在類別數量列出前10個類別,但我不知道如何去做。

這裏是我的模型:

class Company extends AppModel { 
    public $name = 'Company'; 
    var $hasAndBelongsToMany = array(
     'Category' => 
      array(
       'className' => 'Category', 
       'joinTable' => 'companies_categories', 
       'foreignKey' => 'company_id', 
       'associationForeignKey' => 'category_id', 
       'unique' => true, 
       ) 
     ); 
} 

class Category extends AppModel { 
    public $name = 'Category'; 
    public $useTable = 'categories'; 

    // Set up the relationships 
    var $hasAndBelongsToMany = array(
     'Company' => 
      array(
       'className' => 'Company', 
       'joinTable' => 'companies_categories', 
       'foreignKey' => 'category_id', 
       'associationForeignKey' => 'company_id', 
       'unique' => true, 
      ) 
    ); 
}  

回答

0

你可以嘗試以下方法:

$this->Category->find('list', array(
    'joins' => array(
     'table' => 'companies_categories', 
     'alias' => 'CompaniesCategory', 
     'type' => 'LEFT', 
     'foreignKey' => false, 
     'conditions' => 'Category.id = CompaniesCategory.category_id', 
    ), 
    'order' => 'COUNT(CompaniesCategory.id) DESC', 
    'group' => 'Category.id', 
    'limit' => 10, 
)); 

你可能想看看counterCache,然後將一個company_count字段添加到您categories表,你可以只是做:

$this->Category->find('list', array('order' => 'company_count DESC', 'limit' => 10)); 
+0

我忘了提及,我不能使用counterCache作爲頂部10個類別列表取決於用戶來自400多個城市的列表所在的城市。 – 2012-08-08 20:50:56

+0

那麼第一部分仍然適用。不需要counterCache – tigrang 2012-08-08 20:52:18