2010-10-21 3 views
1

У меня есть следующие таблицы:CakePHP: Настройка связи между двумя моделями с помощью третьей таблицы

  • пользователи
  • Организации
  • EMAIL_ADDRESSES
  • Email_Address_Relations

пользователей и организации могут иметь адреса электронной почты, которые хранятся в таблице Email_Addresses и связаны с помощью Email_Address_Relations t возможность.

Структура 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 

Моя идея заключается в том, чтобы указать тип адреса электронной почты (пользователь или организация), используя соответствующее значение в модулы поля. В полях record_id и email_address_id поля будут отображать правильный адрес электронной почты из адресов электронной почты в адрес владельца или организации владельца.

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

Спасибо, м^е


Чтобы ответить на мой последний комментарий по настройке модели для обеспечения значения по умолчанию для модуля поля, ДА, это может быть сделано как я found out from CakePHP Forums.

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

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

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

id 
module_id (record_id) 
module 
email_address 
created 
modified 

А потом как Users и Organizations hasMany Email_Addresses через module_id и Email_Addresses belongsTo Users и Organizations.

+0

Errrm .. Спасибо, я думаю, что заставляю меня чувствовать себя глупо: D Иногда, когда вы слишком много думаете, это то, что происходит с вами .. lol. Ага! Ваш путь намного проще. Приветствия. –

+0

Последующий вопрос по этому вопросу. Можно ли установить значение по умолчанию для поля «module» в моделях User и Organization, чтобы отношение пользователя к Email_Addresses всегда использовало строку «Пользователь» для модуля и аналогично Организация будет использовать «Org» ... –

+0

Не думайте так, не можете придумать способ добиться этого. – PawelMysior

Смежные вопросы