Я полагаю, что для этого вы должны использовать собственный метод проверки в вашей модели. Примерно так:
class MyModel extends AppModel {
var $name = 'MyModel';
var $validate = array(
'user1_id' => array(
'rule' => 'uniqueUserCombination',
'message' => 'This combination of users is already taken!'
)
);
function uniqueUserCombination($check) {
$count = $this->find('count', array(
'conditions' => array(
'user1_id' => $this->data['MyModel']['user1_id'],
'user2_id' => $this->data['MyModel']['user2_id'],
)
));
return $count==0;
}
}
Вы сказали: «Вы не можете вставить user1_id = 1, user2_id = 5, если в строке это уже есть». Приведенный выше код работает для вашего примера, но позволит user1_id = 5, user2_id = 1. Если вам нужно это тоже запретить, добавьте больше условий к find
выше. Также рекомендуется создать индекс UNIQUE
для обоих столбцов в вашей базе данных.