CakePHP: настройка отношений между двумя моделями с помощью третьей таблицы - PullRequest
1 голос
/ 21 октября 2010

У меня есть следующие таблицы:

  • Пользователи
  • Организации
  • EMAIL_ADDRESSES
  • 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_id и email_address_id будет указан правильный адрес электронной почты из Email_Addresses для его владельца или организации.

Как мне настроить такую ​​модель в CakePHP?

Спасибо, м ^ е


Чтобы ответить на мой последний комментарий о настройке моделей для предоставления значений по умолчанию для поля module , YES, это можно сделать , как я узнал из форумов CakePHP .

Вот как это делается.

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'
      )
    )
  );
}

1 Ответ

1 голос
/ 21 октября 2010

Вам действительно нужны таблицы Email_Addresses и Email_Address_Relations? Я бы пошел по-другому и просто настроил таблицу Email_Addresses. Вот так:

id
module_id (record_id)
module
email_address
created
modified

И тогда и Users, и Organizations имеет множество Email_Addresses до module_id, а Email_Addresses принадлежит Users и Organizations.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...