На вашем месте я бы придерживался функциональности Cake по умолчанию, а не того, что вы делаете.Все эти функции встроены в Cake, так зачем изобретать велосипед?
Во-первых, отношения HABTM уже работают, когда вы их разорвали.Вы можете получить доступ к моделям объединения, добавив с в ассоциации моделей.Это должно дать вам доступ к данным таблицы пересечений.
$hasAndBelongsToMany = array(
'Phone' => array(
'className' => 'Phone',
'joinTable' => 'persons_phones',
'foreignKey' => 'person_id',
'associationForeignKey' => 'phone_id',
'unique' => false,
'with' => 'PersonsPhones'
)
);
Что касается ваших уникальных требований к телефону и электронной почте, почему бы не использовать встроенную проверку Cake для проверки?Таким образом, вы просто вызываете функцию сохранения, а затем Cake выполнит всю проверку за вас.
Например, если у человека есть только один адрес электронной почты, то сделайте это в модели человека.Это подтвердит, что ввод является адресом электронной почты и что это уникальный адрес электронной почты в базе данных.Вы можете выполнить эту проверку с любым полем и с легкостью создавать собственные правила проверки.
public $validate = array(
'email' => array(
'email' => array(
'rule' => 'email',
'message' => 'You must enter an email address.'
),
'isUnique' => array(
'rule' => 'isUnique',
'message' => 'An account with this email address already exists.'
)
)
);
Насколько я понимаю, есть причина, по которой вы бы использовали HABTM для адреса электронной почты.Обычно люди не делятся адресами электронной почты, поэтому hasMany, вероятно, будет лучше.Я вижу, как это работает для телефона, потому что люди часто делятся телефонными номерами.Я говорю это так, чтобы вы были уверены, что HABTM - это отношения, которые вы действительно хотите использовать.