Problema de clave unica

Hola a todos,

Tengo un error de clave primaria de la base de datos y se me presenta la página de error del framework en lugar de un mensaje en la aplicación indicando de que error se trata.

Como puedo transformar esa excepcion del tipo “CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘5-1’ for key 2” En un mensaje de error a presentar en el formulario de alta relleno con los datos intruducidos.

Gracias

Saludos.

Podrias trabajar con excepciones… pero si tienes duplicadas las claves en una tabla deberias revisar primero la existencia del id que vas a insertar…

¿Como reviso que esos dos campos no estén en ningun registro de la tabla? ¿Con una sentencia hecha a medida? ¿No lo valida el framework?

Yo recojo la excepcion de duplicate entry, pero como transformo el mensaje para que esté en los errores que se presentan en la view:


<?php echo $form->errorSummary($model); ?>

Segun he visto las consultas que realiza el framework nunca valida datos a menos que utilizes una regla en el modelo la cual digas que el campo es de tipo unique…

http://www.yiiframework.com/doc/api/CValidator

Si, el CValidator para un campo funciona perfectamente, pero en mi caso la clave única es de dos campos.

He encontrado esto http://www.yiiframework.com/forum/index.php?/topic/8795-unique-records/page__hl__errorSummary__fromsearch__1

Hasta donde tengo entendido no puedes utilizar con Yii 2 claves primarias en una sola tabla… entonces supongo que la tabla de la cual hablas es una tabla intermedia… por lo que supongo que puedes hacer 3 cosas…

1.- Verificar mediante una consulta si los registros que insertaras ya existen y sino existen insertarlos

2.- Eliminar todos los registros y volverlos a insertar mediante barrido e insercion

3.- si es una tabla intermedia, quitar el atributo de llave primaria a los campos lo que permitira insertar duplicados

Por mas que una tabla tenga clave primaria, la combinacion de otros dos campos (que no incluyan la clave primaria) puede declararse como unique…

Lo mejor es hacer tu propio validador como sugirio mbi en el post que encontraste