我想在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的说明进行操作,但我仍然不清楚。
答案 0 :(得分:2)
如果您的连接表没有额外的字段(在您的示例中看起来不像),则不应使用through
选项。
如果可以,您应该遵循CakePHP命名约定,这意味着您的连接表应该命名为users_clothes
,其两个字段应该是user_id
和clothe_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)