Ves al contingut
Racó Tècnic
Torna enrere

Validar datos duplicados en CakePHP

Edita la pàgina

Hoy mismo he necesitado de una validación para verificar si un dato ya existe en la base de datos. Dado que CakePHP 1.1 (en versiones posteriores a la 1.2 podéis utilizar “isUnique”) no lleva una validación en su núcleo para estos menesteres he tenido que crearla y ahora la comparto con vosotros:

/**
 * Verifica si un campo existe en la base de datos
 * Si estamos editando se excluye el valor guardado en la validación
 * @param array $data
 * @param string $field Nom de la cel·la a verificar
 * @return
 */

public function checkUnique($data)
{
  $field = array_pop(array_keys($data));
  $data = array_pop(array_values($data));

  // Si estem editant...
  if (isset($this->data[$this->name]['id'])) {
    if ($field == $this->field($field, array($this->name . '.id' => $this->data[$this->name]['id']))) {
      return true;
    }
  }
  // Si no estem editant...
  if ($this->hasField($field)) {
    return $this->isUnique(array($field => $data));
  }
}

Para utilizarlo no tenéis más que añadir el trozo de código en el modelo deseado (normalmente en AppModel, para poder utilizarlo desde cualquier modelo) y añadir la validación en el modelo que queráis:

var $validate = array(
  'NOMBRE DE LA CELDA A VALIDAR' => array(
    'rule'    => 'checkUnique',
    'message' => 'Blahblahblah'
  )
);

Un ejemplo muy común:

var $validate = array(
  'username' => array(
    'rule'    => 'checkUnique',
    'message' => 'Ya existe un usuario registrado con este nombre!'
  )
);

Que lo disfrutéis :)

Edición: Se me olvidó comentar que, a diferencia del método de validación checkUnique que se utiliza en el post Inegrando CakePHP y PhpBB 3.x, este método sirve también a la hora de editar un ítem ya que, en ese caso, retorna true si el valor de la celda coincide con el ya guardado en la base de datos.

Comentaris arxivats (5)

Els comentaris estan tancats. Aquests comentaris provenen de l'antic lloc de WordPress i només es poden llegir.

  1. heavymetal!!!!

    ei k passa mestre! Escolta, k a la 1.3 el mètode isUnique per la validació ja està implementat.... k lo seppasssssss!!! nus veiem dema!

  2. Booletaire

    Ok, rectifico, com bé ha dit l'amic heavymetal, a la versió 1.3 de CakePHP ja existeix un mètode per a validar dades duplicades:

    http://book.cakephp.org/view/1166/isUnique

  3. Booletaire

    jajajjaajja

    joder, ara que m'havia decidit a estrenar l'etiqueta de Cake 1.3... zAS!

    però escolta mestre... no vols dir que et refereixes al mètode "isUnique" que empro al mètode que he posat? Si és així aquest mètode no serveix per a validar dades... (no amb la variable "validate", clar)

  4. Obelich

    Oye muchas felicidades me da gusto que te encuentres de nuevo publicando tutoriales sobre Cakephp espero ver mas por aca ^_^ ya lo e compartido en mi google reader y como tal en buzz para que te genere mas visitas ^_^ sale pues estamos en contacot echale ganas.

  5. Booletaire

    Muchas gracias Obelich!

    Acabo de modificar un poco el método para no tener que especificar la celda a validar :)


Edita la pàgina
Comparteix aquest article:

Article anterior
UND-001 : Ja a la venta!
Article següent
MyJDB, un sistema de base de datos en JavaScript