October 11, 2011 at 10:41am

Home

isUnique validation with Lithium

This validation rule allows you to validate unique values of any field in any model.

Mariano Iglesias posted an updated version of the validator rule, which supports existing records. Here is the updated version.

<?php
/**
 * isUnique validator for any model. Example usage in model:
 *
 * public $validates = array(
 *     'email' => array('isUnique', 'message' => 'This email is already used')
 * );
 */
Validator::add('isUnique', function ($value, $format, $options) {
    $conditions = array($options['field'] => $value);
    foreach((array) $options['model']::meta('key') as $field) {
        if (!empty($options['values'][$field])) {
            $conditions[$field] = array('!=' => $options['values'][$field]);
        }
    }
    $fields = $options['field'];
    return is_null($options['model']::find('first', compact('fields', 'conditions')));
});
?>

More about validation with Lithium