Я уверен, что не являюсь первым, у кого есть составные уникальные ключи в таблицах и кто хочет проверить их. Я не хочу изобретать велосипед, таким образом, я спрашиваю здесь сначала. У меня есть несколько таблиц, которые имеют 'идентификационные' столбцы как первичные ключи и два других столбца как уникальные составные ключи. Было бы хорошо иметь правило проверки проверить, что отправленная запись уникальна, и отобразите ошибку проверки, если это не. В Cakephp это могло быть сделано пользовательским правилом проверки. Я вполне уверен, кто-то уже создал такой метод.
Идеально это был бы метод в app_model.php, который мог использоваться различными моделями.
Я использую эту функцию:
function checkUnique($data, $fields) {
if (!is_array($fields)) {
$fields = array($fields);
}
foreach($fields as $key) {
$tmp[$key] = $this->data[$this->name][$key];
}
if (isset($this->data[$this->name][$this->primaryKey]) && $this->data[$this->name][$this->primaryKey] > 0) {
$tmp[$this->primaryKey." !="] = $this->data[$this->name][$this->primaryKey];
}
//return false;
return $this->isUnique($tmp, false);
}
в основном используется:
'field1' => array(
'checkUnique' => array(
'rule' => array('checkUnique', array('field1', 'field2')),
'message' => 'This field need to be non-empty and the row need to be unique'
),
),
'field2' => array(
'checkUnique' => array(
'rule' => array('checkUnique', array('field1', 'field2')),
'message' => 'This field need to be non-empty and the row need to be unique'
),
),
Таким образом, в основном это покажет предупреждение под каждым из полей о том, что оно не уникально.
Я часто использую это, и он работает правильно.
Вы можете поместить его в модель приложения, но я предлагаю просто добавить его в модель, поместив правило с его свойством $ validate
.
Ознакомьтесь со встроенным правилом isUnique .