La clase Model tiene un método isUnique () al que le podemos pasar varias condiciones, en formato de pares "campo" => "condición" (como los métodos Find) y un segundo parámetro para booleano para responder en cuanto una condición se cumpla. Si le pasas true, isUnique devuelve true con tal de que se cumple alguna de las condiciones. Si le pasas false, tienen que cumplirse todas las condiciones.
Cuando estamos añadiendo un modelo (todavía no está guardado en la base de datos) el problema no se presenta y valida correctamente.
Pienso que el código se explica bastante bien:
function usuarioEsUnico ($nombreUsuario) {
// Empezamos suponiendo que el nombre no va a validar
$esValido = false;
// La condición básica es que no coincidan los nombres de usuario
$condiciones['usuario'] = $nombreUsuario;
// Si estamos editando (hay valor en model::id, entonces comprobamos que no sea el mismo id
if ($this->id) {
$condiciones['id'] = '<> '.$this->id;
}
// Y ahora preguntamos al modelo si es único
$esValido = $this->isUnique ($condiciones, false);
return $esValido;
}
3 comentarios:
Hola!!!Tengo la siguiente duda: Como hago para indicar en el "modelo" que la clave primaria es compuesta, es decir, esta constituida por mas de un atributo. Ejemplo: codigo_empresa y nro_sucursal...el nro_sucursal es correlativo dentro de la empresa...con lo cual ambos campos forman la clave primaria. Como expreso esto en la propiedad $primaryKey???...Se pueden definir claves primarias compuestas en Cake??.
Saludos a todos!!!
Esto se ha discutido varias veces en los grupos cakePHP de Google. Por ejemplo:
http://groups.google.com/group/cake-php/browse_thread/thread/23229ec81b25d6f7/949defedf3bc4324?lnk=gst&q=compound+keys&rnum=1#949defedf3bc4324
Y la respuesta básicamente es que CakePHP no maneja claves compuestas.
Personalmente siempre he tenido problemas tanto con claves compuestas como con claves "externas". Siempre uso id abstractos.
Gracias Frankie!!! Espero que en sucesivas versiones de Cake logren solucionar este tipo de problemas con las claves compuestas.
Publicar un comentario