Problema con reglas de validacion [Yii 1]

Hola foro,

tengo un problema.

Tengo un model donde quiero validar alguno attributos.

Los attributos son cliente_cap y cliente_comune.

En mi tabla CAP a cada "cap" le corresponde un "comune".

Exemplo:

CAP ------------ COMUNE


01010 – -- – --BLERA

07100 – -- – --SASSARI

00123 – -- – --ROMA

20123 – -- – --MILANO

y sigue por todos los codigos postales de Italia.

Ahora en mi formulario tengo (como he dicho antes) los campos cliente_cap y comune_cap.

Si de mi Modelo quiero preguntar si el comune insertado de verdad tiene ese cap como puedo hacer?

No puedo permitir que si un usuario inserta como cap 00123 pueda insertar como comune SASSARI (i pasar la validacion) por que SASSARI tiene cap 07100 y non 00123.

Y entonces si el usuario inserta cap 00123 y comune SASSARI el modelo tiene que bloquear la validacion y redirectionar a la misma vista.

Esto es mi problema.

En este momento solo llego a verificar que el cap y el comune existen

con estas reglas de validacion:




public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

		

		array('cliente_comune','exist','allowEmpty' => true, 'attributeName' => 'comune', 'className' => 'Cap', 'message'=>'Il Comune non è corretto', 'on'=>'PS, RS, AR, RU, TG, PC'),

		

		array('cliente_cap','exist','allowEmpty' => true, 'attributeName' => 'cap', 'className' => 'Cap', 'message'=>'Il Cap non è corretto', 'on'=>'PS, RS, AR, RU, TG, PC'),

..................



però no llego intender como puedo hacer para que se cree la regla que he esplicado antes.

Alguien puede ayudarme por favor?? Les pido disculpa por mi espanol. Gracias

Probá algo así:




function rules(){

	return [

	['cliente_comune', 'testClienteComune']

	];

}


public function testClienteComune($attribute, $param){

	if ($this->hasErrors()===false){

		if (ClienteComune::model()->count('comune=:comune AND cap=:cap', [':comune'=>$this-> cliente_comune, ':cap'=>$this->cliente_cap])==0)

			$this->addError('cliente_comune', 'Invalid pair of cliente_comune and cliente_cap');

	}

}



Hola sebas,

mucahs gracias de tu respuesta.

He echo lo que dices y todo ha salido bien.

Muchisimas gracias otra vez!!!! :)

Te mereces un +1 por que hace dias que ententaba…pero nunca me salia bien.