如何正确设置3个模型之间的多个关联(CakePHP)

时间:2014-12-20 13:53:50

标签: database cakephp model associations

所以我昨晚试图解决这个问题,经过几次思考后我决定需要一些帮助。我确实发布了一个关于ID字段没有被填写的问题,但是它太长时间缠绕和混乱,我意识到问题可能是基于关联。

我正在研究客户数据库。对于大型企业客户而言,这种关系变得有点复杂。我有3个模型,Customer,CustomerAddress和CustomerContact。客户可以拥有多个地址和许多联系人,但联系人也基于一个地址,因此地址有很多联系人。

我想要达到的最终结果是能够以两种方式搜索数据,例如

Customer -> Address 1 -> Contact 1, Contact 2, Contact 3, etc....
            Address 2 -> Contact ... ... ...
            ....

或者....

Customer -> Contact 1 -> Address
            Contact 2 -> Address
            ....

我遇到的问题是地址必须hasMany个联系人和联系人必须hasOne地址,但这两个关系会发生冲突,因为另一方应该belongsTo并且它不会吨。

1 个答案:

答案 0 :(得分:0)

这样的巧合。上周刚刚学到了这个! 据我所知,这是一个基本的关系布局

客户有很多地址 地址belongsTo Customer

地址hasMany联系人 联系belongsTo地址

现在这涵盖了您想要实现的第一个案例的基本模型。通过地址搜索客户联系。

至于第二种情况。从与客户的联系中查询将是非常昂贵的,所以,我的建议是

创建关系:

客户拥有多个地址,在此之上构建模型。这种关系称为hasMany,其中两个模型具有hasMany关系,但在关系之上有更多信息。例如:

Group hasAndBelongsToMany User 用户hasAndBelongsToMany组

这需要一个新表groups_users。此外,每个组可以有多个管理员。假设我们遵循所有2.x约定。 Cake不允许在此表中添加额外的列。因此,如果将此关系group_users视为模型。我们可以根据需要在其中添加尽可能多的额外列。

关系变成了 GroupUser属于数组('User','Group'); 用户hasmany GroupUser Group hasmany GroupUser

在您的情况下,创建关系:Customer hasMany Address to Model。让来电是CustomerAddress。

然后,CustomerAddress拥有多个联系人和联系人belongsTo CustomerAddress。

希望这有帮助!