首页 > 解决方案 > CakePHP 3.x -> 属于 Many for theree 表

问题描述

我有一个设置,其中关系是三个因素:

成员组角色

因此,一个成员可能是多个组的一部分(并且组包含多个成员),但根据该组合,角色也会有所不同。

工作中的数据库人员告诉我要像这样设置表:

member
id name

group
id name

role
id name

member_group_role
id member_id group_id role_id

我如何让它与 cakephp 一起工作?我只为两个链接表成功设置了 HABTM,但不是三个。

谢谢!

标签: mysqlcakephpcakephp-3.0

解决方案


根据您的结构,我认为每张桌子有 4 个模型。前 3 个模型将与第 4hasMany个模型相关,第 4 个模型将与这些模型BelongsTo相关

1) 会员

class MemberTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasMany('MemberHasGroupHasRole')
            ->setForeignKey('member_id');
    }
}

2) 组

class GroupTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasMany('MemberHasGroupHasRole')
            ->setForeignKey('group_id');
    }
}

3) 角色

class RoleTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasMany('MemberHasGroupHasRole')
            ->setForeignKey('role_id');
    }
}

4) MemberHasGroupHasRole

class MemberHasGroupHasRoleTable extends Table
{
    public function initialize(array $config)
    {
        $this->belongsTo('Member')
            ->setForeignKey('member_id')
            ->setJoinType('INNER');

        $this->belongsTo('Group')
            ->setForeignKey('group_id')
            ->setJoinType('INNER');

        $this->belongsTo('Role')
            ->setForeignKey('role_id')
            ->setJoinType('INNER');
    }
} 

推荐阅读