如何使用CakePHP3定义多对多关系?

时间:2015-08-10 13:42:49

标签: php mysql cakephp cakephp-3.0

我想在CakePHP 3中的三个表之间创建多对多的关联。通过在我的控制器和模型中定义这种关联,但我无法解决这个问题。

我的三张表如下:

表一:用户

ID   Name
1    gert
2    henk

表二:衣服

ID   Name
1    jacket
2    jeans

这是我保存Users表和Clothes表之间链接的表。所以现在用户可以拥有多件衣服,不同的衣服可以属于多个用户。

表三:Users_has_clothes

ID   UserId(forKey)   ClothesId(forKey)
1    1                1
2    2                1
3    1                2

我试图按照CakePHP官方网站Using the ‘through’ Option的说明进行操作,但我仍然不清楚。

1 个答案:

答案 0 :(得分:2)

如果您的连接表没有额外的字段(在您的示例中看起来不像),则不应使用through选项。

如果可以,您应该遵循CakePHP命名约定,这意味着您的连接表应该命名为users_clothes,其两个字段应该是user_idclothe_id。有关命名约定的更多详细信息,请参阅CakePHP documentation。使用这些约定,以下代码将起作用:

public class User extends Table {
    public function initialize (array $config) {
         $this->belongsToMany('Clothes');
    }
}
// Same for table Clothe

如果您确实需要保留当前的名称,则应添加以下额外选项:

public class User extends Table {
    public function initialize (array $config) {
         $this->belongsToMany('Clothes', [
            'joinTable' => 'Users_has_clothes',
            'foreignKey' => 'UserId', 
            'targetForeignKey' => 'ClotheId'
        ]);
    }
}
// Same for Clothe (switch foreignKey and targetForeignKey)