Comparar un campo de una tabla, con la suma de otro campo de esa tabla con otro d e otra tabla


(Rafael Rosales) #1

Hola a todos los foristas, necesito implementar una validacion de comparacion, el problema que en esa comparacion intervienen mas de dos campos y uno es de otrp modelo, el ejemplo practico:
tengo tabla1 y tabla2, en tabla1 tengo los campos importe y valor, la comparacion de importe y valor es muy sencilla y se valida bien con esta regla:

 array('valor', 'compare', 'compareAttribute' => 'Importe', 'operator' => '<=', 'message' => 'El valor a pagar no puede ser mayor que Importe del cheque'),

pero el problema que en ocaciones se necesita sumar importe con otro campo de otra tabla2 (pagoanticipado), o sea quedaria asi:
importe + pagoanticipado >= valor, en cuestion:
a) importe, es el importe de un cheque tabla1.
b) valor, importe cobrar con el cheque en tabla 1.
c) pagoanticipado, valor remanente que puede tener el cliente y tambien se coje para pagar su valor (importe a cobrar).
Gracias por adelantado y cualquier sugerencia que me puedan dar.


(Jiuly Rojas) #2

A mi cuando me pasan estas cosas decido hacer mi propio validador personalizado

En las rules agregas esto

 public function rules()
    {
        return [

             ['valor','validaValor']
         ];
    }

Y abajo de rules tu regla personalizada. Algo como esto

 public function validaValor($attribute, $params)
{
    if (($this->importe+$this->pagoanticipado) >=$this->valor){
     
       $this->addError('valor', 'El valor no debe ser menor a la suma del importe y pago anticipado');
    }
}

(Rafael Rosales) #3

Hola jiuly256 gracias por responder, solo te pido algo, recuerda que el pago anticipado lo tengo que buscar en otra tabla y creo que si pongo asi:

 ($this->importe+$this->pagoanticipado) >=$this->valor) 

el pagoanticipado se toma como si estuviera en el modelo y no es asi, esta en otro modelo, como lo traigo?.


(Jiuly Rojas) #4

Si las tablas están relacionadas de algún modo llamala por su relacion