【问题标题】:Codeigniter Datamapper many-to-many relationshipsCodeigniter Datamapper 多对多关系
【发布时间】:2012-03-30 14:05:55
【问题描述】:

我正在使用 DataMapper 在我的模型中设置关系,但我碰壁了。

我有一个RealEstate 类、一个Client 类和一个Position 类,它们都有多对多的关系。

  1. Client 可以在 RealEstate 中包含 Position ‘买家’
  2. 同一个Client 可以在另一个RealEstate 中拥有Position‘卖家’

因此,对于给定的RealEstate,很容易找到附加到它的所有Clientss,但是我怎样才能包括那些客户针对特定RealEstate 拥有的Position

【问题讨论】:

    标签: php codeigniter codeigniter-2 codeigniter-datamapper


    【解决方案1】:

    我认为你的设计不正确。 ClientPosition之间确实应该是多对多的关系,但PositionRealEstate之间只有一对多的关系,oneRealEstate一侧.它有效地模拟了 RealEstateClient 之间的多对多关系,其中包含附加信息 (Position)。

    就问题域而言,任何角色 (Position) 都附加到特定的RealEstate,但任何Client 可以有任意数量的角色,任何RealEstate 可以( ?) 附加了多个角色。

    我手头没有 CodeIgniter 2,因此无法提供代码示例,但如果你真的需要它,请告诉我 - 我家里有 CodeIgniter 2。

    【讨论】:

    • 所以我有一个 RealEstate 类、一个 Position 类和一个 Client 类。一个房地产有几个附加的职位(您可以将它们视为组。这些职位包含客户。例如,在房地产 APPARTMENT1 中,客户 John Doe 作为所有者处于该职位。但他可以在另一个房地产的另一个职位上!在我的数据库中,我有 - RealEstates - Clients - Positions - Clients_Positions(多对多) - Positions_RealEstates(一对多) 我怎样才能获得在给定 RealEstate 拥有职位的所有客户。是否还应该有一个 Clients_RealEstates 表?
    • 我不这么认为。原始查询类似于select * from clients c join clients_positions cp where cp.estate_id = $estate_id。我对 CI DataMapper 库不熟悉,所以忍不住将此查询转换为 DataMapper 代码,对不起。 :)
    • 嗨@J0HN,我设法自己修复了它。因此,我将多对多关系规范化为客户与合同、财产与合同以及职位与合同之间的一对多关系。 Contract 表和模型具有所有其他对象的 id/外键,并且知道连接了哪一个。感谢您的意见!
    猜你喜欢
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多