2014-01-17 32 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”)