【问题标题】:CakePHP: Setting up relationship between two models via a third tableCakePHP:通过第三个表设置两个模型之间的关系
【发布时间】:2010-10-21 07:11:15
【问题描述】:

我有以下表格:

  • 用户
  • 组织
  • 电子邮件地址
  • Email_Address_Relations

用户和组织都可能有电子邮件地址,这些地址存储在 Email_Addresses 表中,并通过 Email_Address_Relations 表关联。

Email_Address_Relations 的结构

id char(36) NOT NULL
module varchar(64) NOT NULL DEFAULT 'User'
record_id char(36) NOT NULL
email_address_id  char(36) NOT NULL
created datetime NOT NULL
modified datetime NOT NULL

我的想法是在 module 字段中使用合适的值来指示电子邮件地址的类型(用户或组织)。 record_idemail_address_id 字段会将正确的电子邮件地址从 Email_Addresses 映射到其所有者用户或组织。

如何在 CakePHP 中建立这样的模型?

谢谢, m^e


要回答我关于设置模型以提供 module 字段的默认值的最后评论,是的,可以这样做,就像我 found out from CakePHP Forums。 p>

这就是它的完成方式。

class User extends AppModel {
  var $hasMany = array(
    'EmailAddress' => array(
      'className' => 'EmailAddress',
      'foreignKey' => 'record_id',
      'conditions' => array(
        'EmailAddress.module' => 'User'
      )
    )
  );
}

class Organization extends AppModel {
  var $hasMany = array(
    'EmailAddress' => array(
      'className' => 'EmailAddress',
      'foreignKey' => 'record_id',
      'conditions' => array(
        'EmailAddress.module' => 'Organization'
      )
    )
  );
}

【问题讨论】:

    标签: model-view-controller database-design cakephp model


    【解决方案1】:

    您真的需要Email_AddressesEmail_Address_Relations 表吗?我会以不同的方式去做,只是设置Email_Addresses 表。像这样:

    id
    module_id (record_id)
    module
    email_address
    created
    modified
    

    然后UsersOrganizations 都有许多 Email_Addressesmodule_idEmail_Addresses 属于 UsersOrganizations

    【讨论】:

    • Errrm .. 谢谢你让我觉得自己很傻 :D 有时当你想得太难时,这就是发生在你身上的事情。哈哈。是的!你的方式让它变得更简单。干杯。
    • 对此的后续问题.. 有没有办法可以为用户和组织模型中的“模块”字段设置默认值,以便用户与 Email_Addresses 的关系将始终使用字符串模块的“用户”和同样的组织将使用“组织”...
    • 不这么认为,想不出办法实现这个。
    • 是的。正如我从蛋糕论坛中发现的那样,它可以完成。请检查上面的问题 - 我已经在其中添加了解决方案。感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多