2014-01-17 58 views
1

我有3個表:如何在cakephp中連接3個表格? (關係)

user: 
id;name 

usercompany: 
id;user_id, company_id 

company: 
id;company_name 

我怎樣才能全部3個表連接的蛋糕? 我希望能夠看到哪些公司連接到用戶。 用戶可以屬於多個公司。

在用戶控制器中,我只是簡單地使用$ this-> User-> find(「all」),它應該向我顯示與關聯公司(包括公司名稱)的所有用戶。

我該怎麼做蛋糕?我應該使用什麼,hasandBelongsToMany?感謝您的見解。

+2

你看過[手冊](http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html)嗎? – arilia

回答

2

我想你沒看手冊,你需要知道的一切都在this page

這是一個HABTM,hasAndBelongsToMany協會。您的連接表也不遵循CakePHP約定,它應該被命名爲companies_users。 See the page about conventions。如果你不遵循約定,你必須在所有地方聲明你正在使用的表,模型和外鍵。如果它是一個傳統的數據庫,並且你不能改變它們,那好。但如果它是一個新的應用程序,你應該遵循框架約定,它會讓事情變得更容易。

用戶< - > CompaniesUser < - >公司

class User extends AppModel { 
    public $hasAndBelongsToMany = array(
     'Company' => 
      array(
       'className' => 'Company', 
       'joinTable' => 'companies_users', 
       'foreignKey' => 'user_id', 
       'associationForeignKey' => 'company_id', 
       'with' => 'CompaniesUser' 
      ) 
    ); 
} 

你必須定義的 「另一面」,本公司對型號assoc命令爲好。

爲了能夠在分頁查詢中爲用戶提取所有公司,您必須登錄define the joins manually。 SO上有很多問題和答案,解釋如何做到這一點,here is an oneanother one

1

以下步驟:

第1步:創建3種型號命名爲user.php的,UserCompany.php和Company.php

第2步:在內部user.php的

var $hasMany = array(
'UserCompany' => array(
    'className'  => 'UserCompany', 
    'foreignKey' => 'user_id' 
) 
); 

第3步:內部UserCompany.php

var $hasMany = array(
    'Company' => array(
     'className'  => 'Company', 
     'foreignKey' => 'company_id' 
    ) 
    ); 

步驟4:從控制器 $這 - >û ser-> find(「all」)