【问题标题】:How to connect 3 tables in cakephp? (relations)如何在 cakephp 中连接 3 个表? (关系)
【发布时间】:2014-01-17 09:36:09
【问题描述】:

我有 3 张桌子:

user:
id;name

usercompany:
id;user_id, company_id

company:
id;company_name

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

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

如何在蛋糕中做到这一点?我应该使用什么,hasAndBelongsToMany?感谢您的见解。

【问题讨论】:

标签: cakephp


【解决方案1】:

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

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

用户 CompaniesUser Company

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

【讨论】:

    【解决方案2】:

    按照以下步骤操作:

    第 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 步:从控制器 $this->User->find("all")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多