【问题标题】:How to correctly set multiple associations between 3 models (CakePHP)如何正确设置 3 个模型之间的多个关联(CakePHP)
【发布时间】:2014-12-20 13:53:49
【问题描述】:

所以我昨晚正在努力解决这个问题,经过几次思考后,我决定我需要一些帮助。我确实发布了一个关于未填写 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 而不是。

【问题讨论】:

  • 至少:在Contact表中,存放Address表的主键。在 Address 表中,存储 Customer 表的主键。 hasOne 术语的 Cakephp 使用使分析复杂化。您的联系人belongsTo一个地址。仅供参考:hasOne 在数据库方案中不如 belongsTo 常见。
  • 是的,我目前的工作方式与我发布的第一个示例一样。问题是如果不查找所有地址,我就无法搜索联系人。
  • 关系不一定是互惠的。为什么不能使用 Address hasMany Contacts?
  • 如果地址有很多联系人,那么联系人必须属于地址。在这种情况下,我不确定如何进行查找以返回第二个示例中的结果?

标签: database cakephp model associations


【解决方案1】:

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

客户有很多地址 地址属于客户

地址有很多联系人 联系人属于地址

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

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

创建关系:

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

组 hasAndBelongsToMany 用户 用户 hasAndBelongsToMany 组

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

关系变成 GroupUser belongsTo array('User', 'Group'); 用户有多个 GroupUser 组有很多组用户

在您的情况下,创建关系:Customer hasMany Address to a Model。让我们调用 CustomerAddress。

那么CustomerAddress有很多Contact并且Contact属于CustomerAddress。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多