Buenas, vengo nuevamente al foro con una pregunta a ver si se puede hacer a traves del rules que trae el yii digamos que tenemos una tabla cursos donde se hace varios tipos de cursos y otra tabla participantes, que van relacionados a los cursos anteriormente mencionados, hay alguna manera a a traves del rules de NO PERMITIR que se pueda crear un registro de un mismo participante a el mismo curso? es decir.
CURSOS PARTICIPANTES
id id
nombre idcurso
tipocurso idpersona
sexo
de esta manera un mismo participante si puede ser creado en varios cursos pero no detro del mismo idcurso, NO PUEDE REPETIR CURSOS
algo como:
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('idpersona AND idcurso', 'unique','message'=> 'Este usuario ya realizo este curso'),
);
}
No se como expresarlo, es decir, que solo cuando se cumplan las dos condiciones salga el mensaje! >.< espero me entiendan xD
hola esteban ya habia pensando en ese, el problema es que no tengo idea de como expresar en la funcion, lo que necesito comprar
por ejemplo yo hice esto
array('idpersona','unique','message'=>'Esta persona ya se encuentra registrada en un evento'),
En este punto, no me deja crear dos veces a la misma persona, mi problema es que si se deberia poder, solo que no en el mismo tipocurso, cabe destacar que yo estoy haciendo la validacion desde la tabla participante. no se como preguntar por el tipocurso que le corresponde a este participante. T_T
no se como expresarlo <.<
PD: intente con las que me dejaste pero no pude sacarlas
hola wasakaca2 la verdad no es tan complicado, solo es hacer una función, que haga una consulta a la base datos preguntando si ya existe un participante con ese curso inscrito te voy a pasar un ejemplo en el que hice algo parecido, espero te sirva.
public function verificarClienteUnico($attribute, $param)
{
$client=$this->attributes['cliente_idcliente'];
$criteria=new CDbCriteria;
$criteria->condition='cliente_idcliente=:cliente_idcliente';
$criteria->params=array(':cliente_idcliente'=>$client);
$conta=Cmvtoini::model()->count($criteria); //consulta para saber si el cliente tiene al menos un movimiento inicial
if($conta!=0) // si el cliente tiene movimientos iniciales asociados, sale el mensaje de error al hacer submit.
{
$this->addError('cliente_idcliente', 'Este cliente ya tiene un movimiento inicial asociado, puedes editarlo en modificar <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />');
}
}
intenté hacer esto:
public function verificarparticipanteeventounico($attribute, $param)
{
$client=$this->attributes['idpersona'];
$client=$this->attributes['idevento'];
$criteria=new CDbCriteria;
$criteria->condition='idpersona=:idpersona AND idevento=:idevento';
$criteria->params=array(':idpersona'=>$client);
$criteria->params=array(':idevento'=>$client);
$conta=TblAsistencia::model()->count($criteria); //consulta para saber si el participante ya existe en el mismo idevento
if($conta!=0) // si ya existe un registro del participante en ese mismo idevento sale el mensaje de error al hacer submit.
{
$this->addError('idpersona', 'Esta persona ya se encuentra agregada en este curso');
}
}
pero me da error, no se como ponerle los dos criteria…
así que hice esto, es mas corto pero no se si es correcto.
public function verificarparticipanteeventounico($attribute, $param)
{
$conta2 = Yii::app()->db->createCommand("SELECT COUNT(*) FROM tbl_asistencia WHERE idpersona=".$client=$this->attributes['idpersona']." AND idevento=".$client=$this->attributes['idevento'])->QueryScalar();
if($conta2!=0) // si ya existe un registro del participante en ese mismo idevento sale el mensaje de error al hacer submit.
{
$this->addError('idpersona', 'Esta persona ya se encuentra agregada en este curso');
}
}