所以我昨晚试图解决这个问题,经过几次思考后我决定需要一些帮助。我确实发布了一个关于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
并且它不会吨。
答案 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。
希望这有帮助!