如何在cakephp中连接3个表? (关系)

时间:2014-01-17 09:36:09

标签: cakephp

我有3张桌子:

user:
id;name

usercompany:
id;user_id, company_id

company:
id;company_name

如何连接蛋糕中的所有3个表格? 我希望能够看到哪些公司与用户相关联。 用户可以属于多个公司。

在用户控制器中,我只想使用$ this-> User-> find(“all”),它应该显示所有连接公司的用户(包括公司名称)。

我怎样才能在蛋糕中做到这一点?我该怎么用,hasAndBelongsToMany?感谢您的见解。

2 个答案:

答案 0 :(得分:2)

我猜你没看过手册,你需要知道的一切都在this page上。

这是一个HABTM,hasAndBelongsToMany关联。您的连接表也不遵循CakePHP约定,它应该被命名为companies_users。 See the page about conventions。如果您不遵循约定,则必须在任何地方声明您正在使用的表,模型和外键。如果它是遗留数据库并且您无法更改它们,那很好。但如果它是一个新的应用程序,你应该真正遵循框架约定,它将使事情更容易。

  

用户< - >公用用户< - >公司

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

你必须在“另一面”定义关联,也就是公司模型。

为了能够在分页查询中为用户提取所有公司,您必须define the joins manually。有很多问题和答案可以解释如何执行此操作,here is an oneanother one

答案 1 :(得分: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步:从控制器     $这 - >用户 - >发现("所有&#34)